i = 1
while 1
puts i
i = i + 1
sleep(1)
end
$ ruby foo.rb | less
$ ruby foo.rb | less -F
$ ruby foo.rb | vim -R
$ ruby foo.rb | tail -f
我想在终端上搜索文字
我使用OSX Yosemite和zsh
答案 0 :(得分:0)
这是一个缓冲问题。你的红宝石正在等待冲洗。如果你循环到3,而不是永恒,你会看到一些输出 - 但直到完全运行。这是一个基于你的例子:
% <latent.rb
i = 1
# STDOUT.sync = true
while i < 3 # making loop finite
puts i
# STDOUT.flush
i = i + 1
sleep(1)
end
% ruby latent.rb |grep . # match anything
<waiting ... and finally all at once>
1
2
%
如果您取消注释flush
或sync
,您会立即看到输出。缓冲的进一步说明是here。
您还可以使用unbuffer
(期望包的一部分)来更改行为:
% unbuffer ruby latent.rb |grep . # match anything
<immediate output>