Compte tenu de cet exemple minimal
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; )
il génère LINE 1
Et puis, après une seconde, sortira LINE 2
, comme prév.
Si nous tuyons cela à grep LINE
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | grep LINE
le comportement est le même que dans le cas précédent, comme prév.
Si, alternativement, nous tuyons cela à cat
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | cat
le comportement est à nouveau la même, comme prév.
Toutefois, si nous tuyons à grep LINE
, puis à cat
,
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | grep LINE | cat
il n'y a pas de sortie avant une seconde, et les deux lignes apparaissent immédiatement sur la sortie, ce qui je ne m'attendais pas.
Pourquoi cela se produit-il et comment puis-je faire la dernière version à se comporter de la même manière que les trois premières commandes?
Utilisation
grep --line-buffered
pour que Grep ne tampon pas tampon plus d'une ligne à la fois.