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

e0uiprwp  于 8个月前  发布在  Unix
关注(0)|答案(3)|浏览(59)

我正在尝试将我创建的全局变量中包含的数组传递到mac上的剪贴板中。
它很长,所以我不想突出显示,复制和粘贴在我的控制台上。
我想使用嵌入式unix代码,特别是mac笔记本电脑控制台的pbcopy函数,它允许我将文本传递到我的电脑剪贴板,准备粘贴。
如果我用文件保存来做这件事,我会这样做(在ruby中):

stringdata = “kflxkhdoudopudpdpudpudpyddoyod”
File.open("temp.txt"){|f| f.write(stringdata)}
`cat temp.txt | pbcopy`

但是,我可以在不创建临时文件的情况下这样做吗?
我相信这是可能的。文本中的一切都是可能的。提前感谢您的解决方案

ivqmmu1c

ivqmmu1c1#

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

使用echo

system "echo #{stringdata} | pbcopy"

`echo #{stringdata} | pbcopy`

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

使用IO类:

如果你想用Ruby的方式来做,我们只需要使用IO类创建一个带有pbcopy的管道。这在我们写入的进程之间创建了一个共享文件,pbcopy将从中读取。
IO.popen("pbcopy", "w") { |pipe| pipe.puts "Hello world!" }

pw136qt2

pw136qt22#

这里有一个简单的单行方法,你可以粘贴到你的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
r1wp621o

r1wp621o3#

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

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

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

相关问题