Es ist wahrscheinlich ein Pufferproblem. Siehe diesen SO-Beitrag zum Deaktivieren der automatischen Pufferung bei Verwendung von Pipes . Sie können den unbuffer
Befehl verwenden von expect
:
$ unbuffer tail -f log.txt | egrep 'WARN|ERROR' | tee filtered_output.txt
Bearbeiten : Da Sie eine längere Pipeline haben, müssen Sie wahrscheinlich jeden Befehl (mit Ausnahme des letzten) entpuffern:
$ unbuffer tail -f log.txt | unbuffer egrep 'WARN|ERROR' | tee filtered_output.txt
Edit 2 : unbuffer
ist unter Cygwin im expect
Quellcode-Paket verfügbar (z. B. expect-20030128-1-src.tar.bz2 im expect/examples
Ordner), aber es ist ein sehr kurzes Skript. Wenn Sie das expect
Paket bereits installiert haben, fügen Sie dies einfach in ein Skript ein, das unbuffer
in Ihrem /usr/local/bin
Verzeichnis aufgerufen wird :
#!/usr/bin/expect --
# Description: unbuffer stdout of a program
# Author: Don Libes, NIST
eval spawn -noecho $argv
set timeout -1
expect
Unter Debian ist der unbuffer
Befehl im expect-dev
Paket enthalten und wird als installiert expect_unbuffer
.
expect
Paket.Wenn Sie einen Befehl verwenden, der nicht wirklich "fertig" ist (wie z. B.
tail -f
), funktioniert dies nicht wirklich oder gar nicht so gut.quelle
Dies ist die Version
unbuffer
, die ich habe:quelle
Wie bereits erwähnt, können Sie das
unbuffer
Dienstprogramm von Expect verwenden.Beachten Sie jedoch, dass Sie abhängig von Ihrem System und der verfügbaren Version von Expect möglicherweise den
-p
Schalter zum Entpuffern verwenden müssen. Zitieren der Manpage:Möglicherweise benötigen Sie diesen Aufruf:
Übrigens finden Sie in diesem Artikel eine ausführliche Erläuterung des Problems der Ausgabepufferung: http://www.pixelbeat.org/programming/stdio_buffering/
quelle