如何将文本数据从ruby控制台传递到我的剪贴板而不保存到文件?

时间:2014-12-03 00:08:14

标签: ruby unix clipboard pbcopy

我试图将我创建的全局变量中包含的数组传递到我的Mac上的剪贴板中。

很长,所以我不想强调,复制和播放粘贴在我的控制台上。

我想使用嵌入式unix代码,特别是mac笔记本电脑控制台的pbcopy函数,它允许我将文本传递到我的计算机剪贴板,准备粘贴。

如果我使用文件保存来执行此操作,我会执行此类操作(在ruby中):

stringdata = <<blah blah blah process, lets say it failed and the progress data is stored in this variable so we can skip forward to where the script screwed up in a process when we start up and handle the error instance(s)>>
File.open("temp.txt"){|f| f.write(stringdata)}
`cat temp.txt | pbcopy`

但是我可以在不创建临时文件的情况下这样做吗?

我确信这是可能的。文本中的所有内容都是可能的。提前感谢您的解决方案

3 个答案:

答案 0 :(得分:22)

如果字符串中没有换行符,您可以回复它;否则,请使用IO类。

使用echo

system "echo #{stringdata} | pbcopy"

OR

`echo #{stringdata} | pbcopy`

然后Ruby将从内存中删除文本,将其注入shell命令,该命令在echopbcopy进程之间打开管道。

使用IO类:

如果您想以Ruby方式实现,我们只需使用IO类创建一个pbcopy的管道。这会在我们写入的进程之间创建共享文件,pbcopy将从中读取。

IO.popen("pbcopy", "w") { |pipe| pipe.puts "Hello world!" }

答案 1 :(得分:7)

您可以使用my clipboard gem将Ruby-API用于系统剪贴板(也是平台独立的,在macOS上它将使用相同的pbcopy实用程序),以便您可以使用来自IRB:

require 'clipboard'
Clipboard.copy(stringdata);p

通常,copy方法返回复制的字符串。这就是;p位的原因:这是一个返回nil的技巧,这样控制台就不会显示实际的字符串数据。

答案 2 :(得分:6)

这是一个简单的单行方法,可以粘贴到IRB控制台中:

def pbcopy(arg); IO.popen('pbcopy', 'w') { |io| io.puts arg }; end

一旦定义了,您就可以完成

pbcopy stringdata

或使用

复制最后一个命令的结果
pbcopy _

当然,如果您使用pry,也可以将方法定义放在初始值设定项或其他内容中,例如.irbrc.pryrc。这是一个更漂亮,更智能的版本:

def pbcopy(arg)
  out = arg.is_a?(String) ? arg : arg.inspect
  IO.popen('pbcopy', 'w') { |io| io.puts out }
  puts out
  true
end