Kann die Ausgabe eines Befehls an zwei andere Befehle weitergeleitet werden?

14365
Richard Hoskins

Wie kann ich die Ausgabe eines Befehls gleichzeitig an die Eingabe zweier anderer Befehle übergeben?

23
Ja. Siehe diese Stackoverflow-Frage: http://stackoverflow.com/questions/670784/redirecting-bash-stdout-stderr-to-two-places Blair Conrad vor 14 Jahren 4

2 Antworten auf die Frage

52
Ben

Es klingt, als würde der teeBefehl tun, was Sie wollen.

Der Schlüssel ist zu verwenden

>( ) 

zur Prozessersetzung . Mit teeVerwenden Sie das folgende Muster:

tee >(proc1) >(proc2) >(proc3) | proc4 

Wenn Sie also die Ausgabe lsals Eingabe für zwei verschiedene grepProgramme verwenden möchten, speichern Sie die Ausgabe grepin verschiedenen Dateien und führen Sie alle Ergebnisse durch less:

ls -A | tee >(grep ^[.] > hidden-files) >(grep -v ^[.] > normal-files) | less 

Die Ergebnisse ls -Awerden in beide greps "geleitet" . Die Datei enthält hidden-filesden Inhalt der ersten Ausgabe grepund normal-filesdie Ergebnisse der zweiten grep. Alle Dateien werden im Pager angezeigt less. EDIT : Was Sie sehen, in lessder gleiche genaue Ausgabe von ls -A, nicht das Ergebnis der greps. Wenn Sie die Ausgabe von ändern möchten, ls -Aum less(zB Austausch der Auftrag so normale Dateien aufgelistet werden, bevor diejenigen versteckt), dann versuchen Sie dies:

ls -A | tee >(grep ^[.]) >(grep -v ^[.]) >/dev/null | less 

Ohne würde >/dev/nulldie Ausgabe von greps an die Ausgabe von angehängt, ls -Aanstatt sie zu ersetzen.

Quelle

dieser ist sehr gut! hayalci vor 14 Jahren 3
+1, weil ich das selbst nach 10 Jahren Shell-Scripting noch nie gesehen hatte! jtimberman vor 14 Jahren 3
6
Peter Mortensen

Verwenden Sie "Abschlag".

Beispiel:

grep someSearchString someFile | tee /dev/tty | wc -l > grepresult 

Dadurch wird die Ausgabe des grep-Befehls an das Terminal und an wc gesendet (dessen Ausgabe wiederum an die Datei grepresult umgeleitet wird).

"Tee" wird im Wikipedia-Artikel tee (Befehl) erklärt . Zentral ist: "Der Befehl tee liest die Standardeingabe, schreibt ihren Inhalt in die Standardausgabe und kopiert ihn gleichzeitig in die angegebenen Dateien oder Variablen."