У меня возникла странная проблема с Ruby, которую я не могу объяснить.У меня есть следующий скрипт, который захватывает любой код, который в данный момент находится в буфере обмена, запускает его с помощью подсветки синтаксиса, а затем помещает новую версию BACK в буфер обмена:
#!/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, но это не имеет значения.