鉴于这个最小的例子
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; )
它输出LINE 1
,然后在一秒钟后LINE 2
,按预期输出。
如果我们通过管道将其发送到grep LINE
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | grep LINE
正如预期的那样,行为与前一种情况相同。
或者,如果我们通过管道将其发送到cat
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | cat
正如预期的那样,行为再次相同。
但是,如果我们通过管道传输到grep LINE
,然后传输到cat
,
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | grep LINE | cat
直到一秒钟过去才有输出,并且两条线都立即出现在输出上,这是我没想到的。
为什么会发生这种情况,如何使最后一个版本的行为与前三个命令相同?