Es scheint, dass neuere Versionen von bash den &>
Operator haben, der (wenn ich das richtig verstehe) sowohl stdout als auch stderr in eine Datei &>>
umleitet (wird stattdessen an die Datei angehängt, wie Adrian klarstellte).
Was ist der einfachste Weg, um dasselbe zu erreichen, aber stattdessen zu einem anderen Befehl zu leiten?
Zum Beispiel in dieser Zeile:
cmd-doesnt-respect-difference-between-stdout-and-stderr | grep -i SomeError
Ich möchte, dass der grep sowohl in stdout als auch in stderr mit den Inhalten übereinstimmt (effektiv, lassen Sie sie zu einem Stream kombinieren).
Hinweis : Bei dieser Frage geht es um Rohrleitungen, nicht um Weiterleitungen. Es handelt sich also nicht um ein Duplikat der Frage, deren Duplikat derzeit markiert ist.
|&
Verknüpfung, die meiner Meinung nach die mit Abstand bequemste Lösung ist, um "sowohl stdout als auch stderr in eine Pipe umzuleiten".Antworten:
(Beachten Sie, dass an eine Datei
&>>file
angehängt wird , während eine zuvor vorhandene Datei&>
umgeleitet und überschrieben wird .)Zu kombinieren
stdout
undstderr
Sie würden das letztere mit dem ersteren auf das erstere umleiten2>&1
. Dadurch wird stderr (Dateideskriptor 2) zu stdout (Dateideskriptor 1) umgeleitet, z.stdout
geht zu stdout,stderr
geht zu stderr.grep
sieht nurstdout
,stderr
druckt daher auf das Terminal.Andererseits:
Leitet stderr nach dem Schreiben in stdout und stderr
2>&1
zurück zu stdout undgrep
sieht beide Zeichenfolgen auf stdin, wodurch beide herausgefiltert werden.Weitere Informationen zur Weiterleitung finden Sie hier .
Zu Ihrem Beispiel (POSIX):
oder mit
>=bash-4
:quelle
&>>
. Ich habe meine Frage korrigiert.|&
anstelle von auch die Bash-spezifische verwenden2>&1 |
.|&
von @ AdrianFrühwirth für zukünftige Leser vorgeschlagenen Verknüpfung : Diese Funktion wird nur mitbash
Version 4+ unterstützt. Wenn Sie 3 oder weniger verwenden, müssen Sie dabei bleiben2>&1 |
.Bash hat eine Abkürzung für
2>&1 |
, nämlich|&
sowohl stdout als auch stderr (siehe Handbuch ):Dies wurde in Bash 4.0 eingeführt, siehe Versionshinweise .
quelle