我所说的 tail 是在它运行时捕获命令输出,而不是在执行结束时获取它。例如,如果您执行一个长时间运行的命令,它将如下所示:
# Run command
puts `ey deploy`
# Nothing happening for a while....
# ...
# Now see all of the output at once.
我想做的是通过 ruby 运行一个命令,并在它发生时查看它的输出。
如您所见,反引号将等待整个命令完成,然后将其输出作为单个字符串返回。要获得生成的输出,请尝试Open3::popen2e
这是一个使用 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