テールとは、実行の最後にコマンド出力を取得するのではなく、実行中にコマンド出力をキャプチャすることです。たとえば、長時間実行するコマンドを実行すると、次のようになります。
# Run command
puts `ey deploy`
# Nothing happening for a while....
# ...
# Now see all of the output at once.
私がやりたいのは、ルビーを介してコマンドを実行し、それが起こっているときに出力を確認することです。
あなたが観察したように、バックティックはコマンド全体が完了するのを待ってから、その出力を単一の文字列として返します。生成されたとおりに出力を取得するには、次を試してくださいOpen3::popen2e
次の例では、各行間で 1 秒間スリープする bash ループを使用して、このインターフェイスのインクリメンタル ストリーミングの性質を示します。
require 'open3'
CMD = %{for ((i=0; i<4; i++)); do echo $i; sleep 1; done}
Open3.popen2e('bash', '-c', CMD) do |i,oe,t|
oe.each { |line| puts line }
end