Piping sowohl stdout und stderr in bash?
Es scheint, dass neuere Versionen der bash haben die &>
Betreiber, die (wenn ich das richtig verstanden habe), leitet sowohl stdout und stderr in eine Datei (&>>
fügt an die Datei statt, als Adrian geklärt).
Was ist der einfachste Weg, das gleiche zu erreichen, aber stattdessen Rohrleitungen, um einen anderen Befehl?
Z.B. in dieser Zeile:
cmd-doesnt-respect-difference-between-stdout-and-stderr | grep -i SomeError
Ich würde die grep-match auf Inhalt auf stdout und stderr (effektiv sind, müssen Sie Sie zusammen in einem stream).
Hinweis: diese Frage ist zu Fragen, Rohrleitungen, nicht umleiten - so ist es nicht ein Duplikat der Frage, es ist derzeit als Duplikat gekennzeichnet.
InformationsquelleAutor der Frage Andrew Ferrier | 2013-05-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
(Beachten Sie, dass
&>>file
hängt zu einer Datei, während&>
umleiten würde und überschreiben eine zuvor vorhandene Datei.)Kombinieren
stdout
undstderr
Sie umleiten würde die letztere, um die ehemaligen mit2>&1
. Dies leitet stderr (file descriptor 2) zu stdout (file-Deskriptor 1), z.B.:stdout
geht auf stdout,stderr
geht auf stderr.grep
sieht nurstdout
daherstderr
druckt das terminal.Auf der anderen Seite:
Nach dem schreiben, um sowohl stdout und stderr,
2>&1
leitet stderr wieder auf stdout undgrep
sieht beide Saiten auf stdin, so filtert beide.Lesen Sie mehr über Umleitung hier.
Bezug auf dein Beispiel (POSIX):
oder mit
>=bash-4
:InformationsquelleAutor der Antwort Adrian Frühwirth
Bash hat ein Kürzel für
2>&1 |
nämlich|&
die Rohre sowohl stdout und stderr (siehe Handbuch):Diese wurde in Bash 4.0 finden Sie in der release notes.
InformationsquelleAutor der Antwort Benjamin W.