给出这个最小的例子
( 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
在经过一秒钟之前没有任何输出,并且这两行立即出现在输出中,这是我没想到的。
为什么会发生这种情况,如何使最新版本的行为与前三个命令相同?
cat
只需将其读取stdin
并输出到中stdout
。当然,我想出了这个问题,用echo
and 代替了很多复杂的东西cat
,但是事实证明它们是无关紧要的,因为这个问题以更简单的例子显示出来。
cat
连接文件。您想通过管道连接做cat
什么?