Usando -n0 tail -f hilo a grep es de hecho una buena solución, y de hecho el primer proceso en el tubo va a morir cuando se trata de la salida a un proceso grep muerto.
Pero si está buscando texto que aparece cerca de la última salida actual de la cola, grep ya habrá leído toda la entrada de la cola (en un bloque) y por lo tanto ya no habrá más salida de texto en el registro que necesita enviar el conducto ya que grep ya lo leyó antes de salir (o tal vez ya estaba en el buffer de tuberías) - al menos esto es lo que entiendo.
Al usar la opción "-m1" en grep parece que haría exactamente lo que quiere y dejar la entrada inmediatamente después de la línea que coincide, pero no pareció hacer la diferencia o me ayudó en mi búsqueda funcionalidad similar. Sospecho que el buffer de la tubería todavía contiene toda la salida de texto de la cola, o alguna otra razón para que la cola no tenga nada que salir. Querías que este texto post-grep-match quedara a continuación, porque es lo que mataría a tu cola cuando lo intentó (aún arriesgado, ¿qué pasa si es la última línea por algún motivo?) Y devuelve el control al script de llamada .
Encontré una forma de hacerlo es sacar cualquier cosa al final del archivo de registro una vez que grep ha salido; es decir.
tail -f logfile | (grep -q; echo >> archivo de registro)
Tengo la teoría de que (si mi suposición es correcta) podría obligar a la tubería a ser menos amortiguada para que funcione sin esto, o tal vez agregando un comando de configuración huponexit al componente de tubería apropiado, es decir, en corchetes (probablemente rizados) ayudaría; pero no me importó agregar una línea en blanco al archivo de registro y funcionó bien, y es solo un script de prueba más pequeño (por lo que no es un archivo de registro de larga duración que debe ajustarse a un formato para otro procesamiento).
shopt -s huponexit sería útil, pero por la subshell-ness de la misma.
PD mi primera publicación aquí, me hubiera gustado hacerlo como un comentario a la respuesta existente en lugar de volver a iterar cosas, pero no creo que pueda ahora.
no es realmente una buena respuesta, pero la cola morirá en una tubería rota en la primera salida después de que el script haya finalizado. – falstro
El problema es qué pasa si el proceso de java no escribe nada después de comenzar, parece que la cola está esperando para siempre. – rangalo
¿Alguna vez se repite el mensaje 'Server Started'? –