Wollen Sie damit sagen, dass Sie beide stderr und stdout wollen in der Konsole erscheinen, aber nur stderr (nicht stdout), die „ERROR“ angemeldet sein, um eine Datei enthält? Es ist diese letzte Bedingung, die es schwierig macht, eine elegante Lösung zu finden. Wenn das ist, was Sie suchen, hier ist meine sehr hässlich Lösung:
touch stm.out stm.err
stm 1>stm.out 2>stm.err & tail -f stm.out & tail -f stm.err & \
wait `pgrep stm`; pkill tail; grep ERROR stm.err > error.log; rm stm.err stm.out
ich gewarnt Sie es hässlich zu sein. Sie könnten es in einer Funktion verstecken, mktemp verwenden, um die temporären Dateinamen zu erstellen, usw. Wenn Sie nicht warten wollen, bis stm beendet wird, bevor Sie den FEHLER-Text in eine Datei protokollieren, können Sie tail -f stm.err | grep ERROR > error.log &
nach den anderen Tail-Befehlen hinzufügen Entferne den Befehl grep aus der letzten Zeile.
'| &' verbinden sowohl Standardausgabe als auch Standardfehler mit dem RHS der Pipeline. – chepner
stm | & grep ERROR scheint die Meldungen mit ERROR zur Konsole herauszufiltern, aber aus irgendeinem Grund scheint das Abschlagen in das Logfile immer eine leere Datei zurückzugeben, auch wenn ich es nicht auf der Konsole haben möchte, stm | & grep ERROR > logfile.txt funktioniert nicht. – user2339933