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
我将此命令放入 bash,希望它打印 FOO
然后等待更多输入:
(echo FOO; cat) | grep FOO | cat
相反,它不打印任何内容,并一直等到我按下 Ctrl+D 才会出现任何内容。
如果我删除最后的 |cat
,问题就会消失。
这是怎么回事? grep 是否在等待更多行,并且仅在通过管道传输到其他内容时才等待?或者 bash/cat 正在等待?
第一个cat
正在等待输入。
grep
,出于性能原因,正在分块读取,没有足够的输入,所以它只是等待。这可以通过强制它读取每一行来解决:
(echo FOO; cat) | grep --line-buffered FOO | cat