在 WSL 中使用 ruby 将文本复制到剪贴板

use ruby in WSL to copy text to clipboard

在我的 Windows 10 机器上我安装了 Ubuntu WSL Ruby 版本 2.7.0。在我的 Ruby 脚本中,我试图从变量中获取一个值并将其复制到剪贴板。

在研究这个问题时,我发现没有任何真正直接的方法可以在本地执行此操作。我确实找到了 this SO post about a gem someone created to access the clipboard easily (here is the link to the github repo)。我完成了安装它并在我的 gemfile 中引用它的所有步骤,但由于某种原因变量值没有被复制到我的剪贴板。

这是我的 Ruby 脚本中的代码:

puts data2

Clipboard.clear
Clipboard.copy(data2);p

此时,在我的脚本中,我想复制到剪贴板的值在 data2 中,我通过将其输出到控制台来验证该值是否在其中。然后我尝试清除剪贴板,然后按照 github 页面中的说明将 data2 复制到剪贴板。我 运行 我的脚本完成了,但是当我尝试粘贴剪贴板上的值时,它不是我期望的值(剪贴板上的值是我之前的值运行 我的 Ruby 脚本)。

之前我曾使用此代码在 Mac 上工作:

IO.popen('pbcopy', 'r+') { |clipboard| clipboard.puts data2 }

但这在 WSL 上不起作用,因为我相信 pbcopy 是 Mac OS 的事情。

需要注意的一件事是,当我 运行 我的 Ruby 脚本时,它确实给我这个警告:

ruby: warning: shebang line ending with \r may cause problems

但我看不出这会如何阻止变量值保存到我的剪贴板。

请有人告诉我为什么这没有按预期工作,甚至是 different/better 将变量值复制到剪贴板的方法,以便我可以将值粘贴到我的 [=44 之后=] 脚本完成 运行ning?一如既往,正确、解释清楚的答案将被标记为已接受和已投票。

谢谢!

感谢@max 的见解。我能够想出一个满足我需要的解决方案,这是代码:

exec( "echo '#{data2}' | clip.exe" )

此代码片段获取存储在 data2 中的值并将其复制到剪贴板。当脚本在我的 Ubuntu WSL 中完成 运行 时,我可以粘贴,剪贴板上的值是脚本为 运行 时包含在 data2 中的值。

希望这对解决这个问题的其他人有所帮助。