Вероятно, это проблема буферизации. Смотрите этот пост об отключении автоматической буферизации при использовании каналов . Вы можете использовать unbufferкоманду из expect:
$ unbuffer tail -f log.txt | egrep 'WARN|ERROR' | tee filtered_output.txt
Изменить : Так как у вас есть более длинный конвейер, вам, вероятно, нужно снять буфер каждой команды (кроме последней):
$ unbuffer tail -f log.txt | unbuffer egrep 'WARN|ERROR' | tee filtered_output.txt
Редактировать 2 : unbufferдоступно на Cygwin из expectпакета с исходным кодом (например, ожидаем-20030128-1-src.tar.bz2 , находится в expect/examplesпапке), но это очень короткий скрипт. Если у вас expectуже установлен пакет, просто поместите его в скрипт, который называется unbufferв вашем /usr/local/binкаталоге:
#!/usr/bin/expect --
# Description: unbuffer stdout of a program
# Author: Don Libes, NIST
eval spawn -noecho $argv
set timeout -1
expect
В Debian unbufferкоманда предоставляется в expect-devпакете и устанавливается как expect_unbuffer.