Diese Nachricht wird wie alle Warn- und Fehlermeldungen auf stderr ausgegeben .
Sie können entweder die gesamte Fehlerausgabe löschen:
tail -f file 2> /dev/null
Oder um nur die Fehlermeldungen herauszufiltern, die Folgendes enthalten truncate
:
{ tail -f file 2>&1 >&3 3>&- | grep -v truncated >&2 3>&-;} 3>&1
Das bedeutet jedoch, dass Sie den Exit-Status von verlieren tail
. Einige Shells haben eine pipefail
Option (aktiviert mit set -o pipefail
) für diese Pipeline, um den Exit-Status zu melden, tail
wenn dies fehlschlägt. zsh
und bash
kann auch den Status einzelner Komponenten der Pipeline in ihrem $pipestatus
/ $PIPESTATUS
Array melden .
Mit zsh
oder bash
können Sie verwenden:
tail -f file 2> >(grep -v truncated >&2)
Beachten Sie jedoch, dass auf den grep
Befehl nicht gewartet wird, sodass die Fehlermeldungen nach dem Beenden möglicherweise angezeigt werden tail
und die Shell bereits mit der Ausführung des nächsten Befehls im Skript begonnen hat.
In zsh
können Sie das ansprechen, indem Sie es schreiben:
{ tail -f file; } 2> >(grep -v truncated >&2)
Dies wird in der zsh
Dokumentation unter info zsh 'Process Substitution'
:
Es gibt ein zusätzliches Problem mit >(PROCESS)
; Wenn dies an einen externen Befehl angehängt ist, wartet die übergeordnete Shell nicht auf den Abschluss von PROCESS. Daher kann sich ein unmittelbar folgender Befehl nicht darauf verlassen, dass die Ergebnisse vollständig sind. Das Problem und die Lösung sind die gleichen wie im Abschnitt MULTIOS im Hinweis Redirection :: beschrieben . Daher in einer vereinfachten Version des obigen Beispiels:
paste <(cut -f1 FILE1) <(cut -f3 FILE2) > >(PROCESS)
(Beachten Sie, dass keine MULTIOS beteiligt sind.) PROCESS wird in Bezug auf die übergeordnete Shell asynchron ausgeführt. Die Problemumgehung lautet:
{ paste <(cut -f1 FILE1) <(cut -f3 FILE2) } > >(PROCESS)
Die zusätzlichen Prozesse hier werden von der übergeordneten Shell erzeugt, die auf ihren Abschluss wartet.
(
)
einem komplexen Befehl vorziehen{
}
?