Creo que su problema es que grep usa algo de almacenamiento en búfer de salida. Prueba
tail -f file | stdbuf -o0 grep my_pattern
establecerá el modo de almacenamiento en búfer de salida de grep en sin búfer.
Enciende grep
Modo de almacenamiento en búfer de línea cuando se usa BSD grep (FreeBSD, Mac OS X, etc.)
tail -f file | grep --line-buffered my_pattern
Parece que fue hace un tiempo --line-buffered
no importó para GNU grep (usado en casi cualquier Linux) ya que se vació de forma predeterminada (YMMV para otros tipos de Unix como SmartOS, AIX o QNX). Sin embargo, a partir de noviembre de 2020, --line-buffered
es necesario (al menos con GNU grep 3.5 en openSUSE, pero generalmente parece necesario según los comentarios a continuación).
Yo uso el tail -f <file> | grep <pattern>
todo el tiempo.
Esperará hasta que grep se vacíe, no hasta que termine (estoy usando Ubuntu).
Si desea encontrar coincidencias en el todo archivo (no solo la cola), y desea que se siente y espere nuevas coincidencias, esto funciona bien:
tail -c +0 -f <file> | grep --line-buffered <pattern>
El -c +0
bandera dice que la salida debe comenzar 0
bytes (-c
) desde el principio (+
) del archivo.