Rohrleitungen 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.
Siehe die zweite Antwort (stackoverflow.com/a/637834/1129642) auf die verlinkte Frage nach dem richtigen Weg zur Pfeife sowohl stdout und stderr. Keine Notwendigkeit für eine weitere Frage.
Nicht eine exakte Kopie, oder? Rohr vs. in Datei umleiten?
Es ist mindestens eine Antwort gibt, die löst beide Szenarien, wenn es nicht die akzeptierte Antwort. Dies ist eine ziemlich häufige Frage, so könnten wir wahrscheinlich feststellen, ein besseres duplizieren, oder Fragen Sie einen moderator zu vermischen - oder auch, im schlimmsten Fall, Handwerk eine völlig neue canonical für dieses Thema. Wenn Sie finden, eine bessere dupe, mit allen Mitteln zu schlagen. Vielen Dank im Voraus.
Löst, ja, aber keine Antworten verwenden Sie den
Dies ist nicht ein Duplikat der verlinkten Frage, und es war nicht klar, dass Marko die Antwort habe, was ich wollte. Auch wird nicht erwähnt |&. Die Abstimmung zu öffnen.
Nicht eine exakte Kopie, oder? Rohr vs. in Datei umleiten?
Es ist mindestens eine Antwort gibt, die löst beide Szenarien, wenn es nicht die akzeptierte Antwort. Dies ist eine ziemlich häufige Frage, so könnten wir wahrscheinlich feststellen, ein besseres duplizieren, oder Fragen Sie einen moderator zu vermischen - oder auch, im schlimmsten Fall, Handwerk eine völlig neue canonical für dieses Thema. Wenn Sie finden, eine bessere dupe, mit allen Mitteln zu schlagen. Vielen Dank im Voraus.
Löst, ja, aber keine Antworten verwenden Sie den
|&
Verknüpfung, die ich denke, ist die am meisten komfortable Lösung für die "redirect sowohl stdout und stderr in eine pipe".Dies ist nicht ein Duplikat der verlinkten Frage, und es war nicht klar, dass Marko die Antwort habe, was ich wollte. Auch wird nicht erwähnt |&. Die Abstimmung zu öffnen.
InformationsquelleAutor 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
:&>>
. Ich habe korrigiert meine Frage.Hinzugefügt habe ich dein Beispiel auf meine Antwort, falls es nicht offensichtlich war, basierend auf meine Beispiele. Als Randbemerkung, können Sie auch die bash-spezifische
|&
statt2>&1 |
.Vielen Dank für die Klarstellung. Hilfreiche Antwort, danke.
Randbemerkung über die Verknüpfung
|&
vorgeschlagen von @AdrianFrühwirth für zukünftige Leser: diese Funktion wird nur unterstützt, mitbash
version 4+. Wenn Sie 3 oder niedriger ist, Sie haben zu stick mit2>&1 |
.Die Bash-Umleitung sehr gut erklärt hier. @AdrianFrühwirth hat einen guten job gemacht, den link eingefügt, geht sogar noch weiter. Manchmal wünschte ich, die offiziellen Bash-Dokumentation war gut.
InformationsquelleAutor 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.
Vor allem vielleicht, der Bash, die Schiffe auf macOS ist zu alt, um dies zu unterstützen.
aber die zsh ist nicht
Da die ksh verwendet |& für coproc, dies scheint wie eine schlechte Wahl für einen unnötigen Kürzel. Ich hasse es zu sehen, Linien, die mit einem Stapel von dups und Umleitungen so viel wie der nächste Kerl, aber es gibt etwas zu sagen für die als explicit....und ich entschuldige mich, dass dieser Kommentar nicht viel hinzuzufügen. Ich wollte nur Ausdrücken Abneigung gegen das Kürzel, ohne downvoting eine tatsächlich hilfreiche Antwort, denn es ist gut, dass die Leute das sehen. Ich wusste das nicht, also danke dafür, dass mir bewusst.
Ich bin damit einverstanden, dass es nicht tragbar - ich vor allem, wie es ihn für interaktiven Bash-Sitzungen, um zu vermeiden Sie zu viel.
InformationsquelleAutor Benjamin W.