Você pode usar tail -f
para continuar lendo o arquivo à medida que ele cresce. Tenha cuidado com o que você alimenta tail -f
em. Você pode canalizar tail -f
em um filtro que aguarda até a linha de log desejada e sai. O que não funciona é canalizar tail -f
em um filtro que canaliza para outro filtro, porque o filtro intermediário armazenará em buffer sua saída. Isso funciona:
: >file.log # create an empty log file
start-selenium-session --log-file=file.log &
{ tail -n +1 -f file.log & } | sed -n '/Started SocketListener/q'
speak-to-socket
Observe que coloquei tail
no plano de fundo. Isso ocorre porque, quando sed
encontra a linha desejada, ela sai, mas o pipeline continua em execução, contanto que tail
esteja aguardando a próxima linha, o que pode não ocorrer imediatamente se alguma vez¹. tail
sairá quando a próxima linha chegar e receber um SIGPIPE
. Isso pode deixar um processo de tail
perdido se o log for removido sem que nenhuma linha seja gravada nele (obtendo o PID do processo tail
para eliminá-lo quando sed
sair seria possível, mas complicado).
¹ Graças a Peter.O por apontar o bug em uma versão anterior.