grep,tee和sleep一起玩不好

时间:2014-12-04 02:32:03

标签: bash grep tee

(echo foo && sleep 1 && echo bar) | grep -P . | tee /dev/null

以上代码是我能提出的最小问题。预期的行为是foo将被回应,第二个将通过,然后bar将被回应。

实际发生的是,第二次传递然后foobar同时被回应。如果您删除 greptee命令(或两者,显然),则会发生正确的行为。但与他们在一起并没有。

我认为这是某种缓冲问题,但我不知道如何绕过它。对我来说这个实际的脚本运行了很长一段时间,直到最后我才看到任何日志消息。 HALP! :(

1 个答案:

答案 0 :(得分:4)

Etan的评论促使我查看grep的手册页,我找到了--line-buffered标志。添加修复问题

(echo foo && sleep 1 && echo bar) | grep --line-buffered -P . | tee /dev/null