Вероятно, это проблема буферизации. Смотрите этот пост об отключении автоматической буферизации при использовании каналов. Вы можете использовать команду 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, который находится в папкеpect 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
.