Provavelmente é um problema de buffer. Veja este post do SO sobre a desativação do buffer automático ao usar tubos . Você pode usar o unbuffer
comando em expect
:
$ unbuffer tail -f log.txt | egrep 'WARN|ERROR' | tee filtered_output.txt
Edit : Como você tem um pipeline mais longo, provavelmente precisará descomprimir cada comando (exceto o último):
$ unbuffer tail -f log.txt | unbuffer egrep 'WARN|ERROR' | tee filtered_output.txt
Edição 2 : unbuffer
está disponível no Cygwin a partir do expect
pacote fonte (por exemplo, expect-20030128-1-src.tar.bz2 , encontrado na expect/examples
pasta), mas é um script muito curto. Se você já possui o expect
pacote, basta colocar isso em um script chamado unbuffer
em seu /usr/local/bin
diretório:
#!/usr/bin/expect --
# Description: unbuffer stdout of a program
# Author: Don Libes, NIST
eval spawn -noecho $argv
set timeout -1
expect
No Debian, o unbuffer
comando é fornecido no expect-dev
pacote e é instalado como expect_unbuffer
.