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

问题描述 投票:0回答:3

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

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

我想使用嵌入式unix代码,特别是Mac笔记本电脑控制台的

pbcopy
功能,它允许我将文本传递到我的计算机剪贴板中,准备粘贴。

如果我用文件保存来做到这一点,我会做这样的事情(在 ruby 中):

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

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

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

ruby unix clipboard pbcopy
3个回答
42
投票

如果字符串中没有换行符,你可以直接回显它;否则,请使用

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!" }


    


17
投票
这是一个简单的单行方法,您可以将其粘贴到 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
    

9
投票
您可以使用

my Clipboard gem 作为系统剪贴板的 Ruby-API(这也是平台无关的,在 macOS 上它将在底层使用相同的 pbcopy

 实用程序),以便您可以从 IRB 使用它: 

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

通常,

copy

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

© www.soinside.com 2019 - 2024. All rights reserved.