(echo foo && sleep 1 && echo bar) | grep -P . | tee /dev/null
以上代码是我能提出的最小问题。预期的行为是foo
将被回应,第二个将通过,然后bar
将被回应。
实际发生的是,第二次传递然后foo
和bar
同时被回应。如果您删除 grep
或tee
命令(或两者,显然),则会发生正确的行为。但与他们在一起并没有。
我认为这是某种缓冲问题,但我不知道如何绕过它。对我来说这个实际的脚本运行了很长一段时间,直到最后我才看到任何日志消息。 HALP! :(
答案 0 :(得分:4)
Etan的评论促使我查看grep的手册页,我找到了--line-buffered
标志。添加修复问题
(echo foo && sleep 1 && echo bar) | grep --line-buffered -P . | tee /dev/null