grep 在打印前等待更多行

grep waits for more lines before printing

我将此命令放入 bash,希望它打印 FOO 然后等待更多输入:

(echo FOO; cat) | grep FOO | cat

相反,它不打印任何内容,并一直等到我按下 Ctrl+D 才会出现任何内容。

如果我删除最后的 |cat,问题就会消失。

这是怎么回事? grep 是否在等待更多行,并且仅在通过管道传输到其他内容时才等待?或者 bash/cat 正在等待?

第一个cat正在等待输入。

grep,出于性能原因,正在分块读取,没有足够的输入,所以它只是等待。这可以通过强制它读取每一行来解决:

(echo FOO; cat) | grep --line-buffered FOO | cat