Je pense que votre problème est que grep utilise une mémoire tampon de sortie. Essayez
tail -f file | stdbuf -o0 grep my_pattern
il définira le mode de mise en mémoire tampon de sortie de grep sur non tamponné.
Activer grep
Mode de mise en mémoire tampon de ligne lors de l'utilisation de grep BSD (FreeBSD, Mac OS X, etc.)
tail -f file | grep --line-buffered my_pattern
Il semble qu'il y a quelque temps --line-buffered
n'avait pas d'importance pour GNU grep (utilisé sur à peu près n'importe quel Linux) car il était vidé par défaut (YMMV pour d'autres Unix comme SmartOS, AIX ou QNX). Cependant, depuis novembre 2020, --line-buffered
est nécessaire (au moins avec GNU grep 3.5 dans openSUSE, mais cela semble généralement nécessaire d'après les commentaires ci-dessous).
J'utilise le tail -f <file> | grep <pattern>
tout le temps.
Il attendra que grep se vide, pas jusqu'à ce qu'il se termine (j'utilise Ubuntu).
Si vous voulez trouver des correspondances dans l'intégralité fichier (pas seulement la queue), et vous voulez qu'il reste assis et attende de nouvelles correspondances, cela fonctionne bien :
tail -c +0 -f <file> | grep --line-buffered <pattern>
Le -c +0
flag indique que la sortie doit commencer 0
octets (-c
) depuis le début (+
) du fichier.