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

27

Wie kann ich die Ausgabe eines Befehls gleichzeitig an die Eingabe von zwei anderen Befehlen leiten?

Richard Hoskins
quelle
4
Ja. Siehe diese Frage zu stackoverflow: stackoverflow.com/questions/670784/…
Blair Conrad

Antworten:

56

Es hört sich so an, als würde der teeBefehl tun, was Sie wollen.

Der Schlüssel ist zu benutzen

>( )

für die Prozesssubstitution . Mit teeVerwenden Sie das folgende Muster:

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

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

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

Die Ergebnisse des ls -Awerden in beide greps "geleitet" . Die Datei enthält hidden-filesden Inhalt der Ausgabe der ersten grepund normal-filesdie Ergebnisse der zweiten grep. Alle Dateien werden im Pager angezeigt less. EDIT : Was Sie in sehen, lessist die gleiche exakte 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 vor versteckten diejenigen aufgeführt sind) , 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

Ben
quelle
3
Dieser ist sehr gut!
Hayalci
3
+1, weil ich das selbst nach 10 Jahren Shell-Scripting noch nie gesehen habe!
Jtimberman
6

Verwenden Sie "tee".

Beispiel:

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

Dadurch wird die Ausgabe des Befehls grep sowohl an das Terminal als auch an wc gesendet (dessen Ausgabe wiederum in die Datei grepresult umgeleitet wird).

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

Peter Mortensen
quelle