我正在尝试将我创建的全局变量中包含的数组传递到我的 Mac 上的剪贴板中。
它很长,所以我不想在我的控制台上突出显示、复制和粘贴。
我想使用嵌入式unix代码,特别是Mac笔记本电脑控制台的
pbcopy
功能,它允许我将文本传递到我的计算机剪贴板中,准备粘贴。
如果我用文件保存来做到这一点,我会做这样的事情(在 ruby 中):
stringdata = “kflxkhdoudopudpdpudpudpyddoyod”
File.open("temp.txt"){|f| f.write(stringdata)}
`cat temp.txt | pbcopy`
但是我可以在不创建临时文件的情况下做到这一点吗?
我确信这是可能的。文字中的一切皆有可能。预先感谢您的解决方案
如果字符串中没有换行符,你可以直接回显它;否则,请使用
IO
类。
使用
echo
:
system "echo #{stringdata} | pbcopy"
或
`echo #{stringdata} | pbcopy`
然后,Ruby 将从内存中提取文本,将其注入到 shell 命令中,该命令在 echo
和
pbcopy
进程之间打开一个管道。
使用IO
类:如果您想以 Ruby 方式执行此操作,我们只需使用 IO 类通过
pbcopy
创建一个管道即可。这会在我们写入的进程之间创建一个共享文件,并且
pbcopy
将从中读取。
IO.popen("pbcopy", "w") { |pipe| pipe.puts "Hello world!" }
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
my Clipboard gem 作为系统剪贴板的 Ruby-API(这也是平台无关的,在 macOS 上它将在底层使用相同的 pbcopy
实用程序),以便您可以从 IRB 使用它:
require 'clipboard'
Clipboard.copy(stringdata);p
通常,
copy
方法返回复制的字符串。这就是
;p
位的原因:返回
nil
是一个技巧,这样控制台就不会显示实际的字符串数据。