Це, мабуть, буферизація. Дивіться цю публікацію SO про відключення автоматичної буферизації під час використання труб . Ви можете використовувати 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.