如何在运行的程序输出上搜索文本

时间:2015-09-05 00:41:00

标签: ruby terminal zsh

foo.rb

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

1 个答案:

答案 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
%

如果您取消注释flushsync,您会立即看到输出。缓冲的进一步说明是here

您还可以使用unbuffer(期望包的一部分)来更改行为:

% unbuffer ruby latent.rb |grep .  # match anything
<immediate output>