Flush 'tail -f' buffer?

Estoy usando la siguiente statement (versión simplificada):

tail -f -c+1 <filename> 

para canalizar un file a un process.

Lo que he encontrado, sin embargo, es que hay una serie de líneas al final que no están conectadas.

Un ejemplo específico es canalizar un file mysql y detenerlo cuando se llega al final:

 tail -f -c+1 mysqdump.sql | sed '/^-- Dump completed/ q0' 

Esto no funciona – la última línea del volcado -- Dump completed [...] no se canaliza a sed.

Mi suposition es que el búfer tail -f , en este caso, se vacía solo cuando está lleno.

¿Alguien sabe cómo puedo solucionar esto?

=================

Encontré la causa: la descripción no está completa (y el código no muestra el comportamiento).

El problema ocurre cuando se canaliza desde un file comprimido (lzma):

 tail -f -c+1 <filename.lzma> | lzma -d | sed '/^-- Dump completed/ q0' 

Lo más probable es que la tail no envíe el último bloque comprimido, ya que no detecta ninguna línea nueva, ya que la input es binaria.

tail -f flushes after cada línea de input. Puede confirmar esto con strace (o truss o lo que sea que su variante de Unix proporcione para rastrear las llamadas al sistema de los processs).

Si hay una línea incompleta, tail -f sigue esperando la siguiente nueva línea. Es una herramienta diseñada para files de text. Si necesita alinear un file binary (por ejemplo, si -- Dump completed no es seguido por una nueva línea), tendrá que usar una herramienta personalizada.

Si networkingirigió la salida de sed fuera de la terminal, hará su propio almacenamiento en búfer. Prueba stdbuf o stdbuf .