我遇到了Ruby无法解释的奇怪问题。我有以下脚本,抓住任何代码目前在剪贴板上,运行它通过一个语法高亮,然后把新版本返回到剪贴板:“ruby script.rb”与“xterm -e ruby script.rb”
#!/usr/bin/ruby1.9.1
require 'coderay'
language = "auto";
if(ARGV.length > 0)
language = ARGV[0];
end
print("Using language: #{language} \n");
codeToHighlight = `xsel --clipboard`
highlightedCode = CodeRay.scan(codeToHighlight, language.intern()).div
IO.popen("xsel --clipboard", mode='w') do |io|
io.write highlightedCode
io.flush
end
奇怪的是,如果我直接在运行一个终端,它工作正常。如果我通过“xterm -e”运行它,但它不起作用。我发现另一个网站是问同样的问题这个线程,但人没有得到回答:http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/138423
那人发现,如果他们加入在像这样的脚本的结尾处的停顿......
10000.times do
puts ""
end
...它的工作原理。为什么是这样?有没有办法来解决这个问题?我试着重写脚本,以便popen返回一个IO对象,我可以手动调用close,但这没有什么区别。
我已经确定,无论问题是在xsel中。我试着在文件末尾添加一行(没有疯狂的puts“”循环),只是将突出显示的代码转储到一个文件中,而且无论运行脚本如何,它的内容都是正确的。我尝试了xclip,它似乎可以在更多情况下工作,尽管我只能获得主要(即中间单击)剪贴板来处理它。当从另一个脚本调用xclip时xclip不起作用,但xclip仍然无法通过xterm -e工作。 – Matthew 2011-02-23 14:14:12