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