23

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

它很长,所以我不想在控制台上突出显示、复制和粘贴。

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

如果我用文件保存来做到这一点,我会做这样的事情(在 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`

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

我确信这是可能的。文字中的一切皆有可能。提前感谢您的解决方案

4

3 回答 3

33

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

使用echo

system "echo #{stringdata} | pbcopy"

或者

`echo #{stringdata} | pbcopy`

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

使用IO类:

如果你想用 Ruby 的方式来做,我们只需pbcopy使用 IO 类创建一个管道。这会在我们写入和pbcopy读取的进程之间创建一个共享文件。

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

于 2014-12-03T06:54:10.133 回答
13

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

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

一旦它被定义,你可以简单地做

pbcopy stringdata

或复制最后一个命令的结果

pbcopy _

当然,您也可以将方法定义放在初始化程序或其他东西中,例如.irbrc或者.pryrc如果您使用pry。这是一个更漂亮、更智能的版本:

def pbcopy(arg)
  out = arg.is_a?(String) ? arg : arg.inspect
  IO.popen('pbcopy', 'w') { |io| io.puts out }
  puts out
  true
end
于 2017-09-06T00:35:30.323 回答
9

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

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

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

于 2016-11-28T14:22:43.740 回答