Wie kann ich die Ausgabe eines Befehls gleichzeitig an die Eingabe von zwei anderen Befehlen leiten?
Wie kann ich die Ausgabe eines Befehls gleichzeitig an die Eingabe von zwei anderen Befehlen leiten?
Antworten:
Es hört sich so an, als würde der tee
Befehl tun, was Sie wollen.
Der Schlüssel ist zu benutzen
>( )
für die Prozesssubstitution . Mit tee
Verwenden Sie das folgende Muster:
tee >(proc1) >(proc2) >(proc3) | proc4
Wenn Sie also die Ausgabe von ls
als Eingabe für zwei verschiedene grep
Programme verwenden möchten, speichern Sie die Ausgabe von jedem grep
in verschiedenen Dateien und leiten Sie alle Ergebnisse durch less
:
ls -A | tee >(grep ^[.] > hidden-files) >(grep -v ^[.] > normal-files) | less
Die Ergebnisse des ls -A
werden in beide grep
s "geleitet" . Die Datei enthält hidden-files
den Inhalt der Ausgabe der ersten grep
und normal-files
die Ergebnisse der zweiten grep
. Alle Dateien werden im Pager angezeigt EDIT : Was Sie in sehen, less
.less
ist die gleiche exakte Ausgabe von ls -A
, nicht das Ergebnis der grep
s. Wenn Sie die Ausgabe von ändern möchten , ls -A
um 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/null
die Ausgabe von grep
s an die Ausgabe von angehängt, ls -A
anstatt sie zu ersetzen.
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."