Dado este exemplo mínimo
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; )
ele gera LINE 1
e, em seguida, após um segundo, gera LINE 2
, conforme o esperado .
Se canalizarmos isso paragrep LINE
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | grep LINE
o comportamento é o mesmo do caso anterior, conforme esperado .
Se, alternativamente, canalizarmos isso paracat
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | cat
o comportamento é novamente o mesmo, como esperado .
No entanto , se canalizarmos para grep LINE
, e depois para cat
,
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | grep LINE | cat
não há saída até que um segundo passe, e ambas as linhas aparecem na saída imediatamente, o que eu não esperava .
Por que isso está acontecendo e como posso fazer a última versão se comportar da mesma maneira que os três primeiros comandos?