Es gibt einige Befehle, die Eingaben filtern oder bearbeiten und sie dann als Ausgabe weitergeben, ich denke normalerweise an stdout
– aber einige Befehle nehmen nur die stdin
und tun, was sie damit tun, und geben nichts aus.
Ich kenne mich am besten mit OS X aus, daher fallen mir sofort zwei ein:pbcopy
und pbpaste
– Mittel zum Zugriff auf die Zwischenablage des Systems.
Wie auch immer, ich weiß, dass, wenn ich stdout nehmen und die Ausgabe ausspucken möchte, beide zu stdout
gehen und eine Datei dann kann ich das tee
verwenden Befehl. Und ich weiß ein wenig über xargs
, aber ich glaube nicht, dass ich danach suche.
Ich möchte wissen, wie ich stdout
aufteilen kann um zwischen zwei (oder mehr) Befehlen zu wechseln. Zum Beispiel:
cat file.txt | stdout-split -c1 pbcopy -c2 grep -i errors
Es gibt wahrscheinlich ein besseres Beispiel als dieses, aber ich bin wirklich daran interessiert zu wissen, wie ich stdout an einen Befehl senden kann, der es nicht weiterleitet und dabei stdout
behält davor, „stumm“ zu sein – ich frage nicht, wie man cat
eine Datei und grep
einen Teil davon und kopiere ihn in die Zwischenablage – die spezifischen Befehle sind nicht so wichtig.
Außerdem – ich frage nicht, wie man das an eine Datei und stdout
sendet – dies könnte eine „doppelte“ Frage sein (sorry), aber ich habe ein wenig gesucht und konnte nur ähnliche Fragen finden, die danach fragten, wie man zwischen stdout und einer Datei aufteilt – und die Antworten auf diese Fragen schienen tee
Schließlich fragen Sie sich vielleicht:„Warum machen Sie pbcopy nicht einfach zum letzten Element in der Pipe-Kette?“ und meine Antwort ist 1) Was ist, wenn ich es verwenden und trotzdem die Ausgabe in der Konsole sehen möchte? 2) Was ist, wenn ich zwei Befehle verwenden möchte, die stdout
nicht ausgeben? nachdem sie die Eingabe verarbeitet haben?
Oh, und noch etwas – mir ist klar, dass ich tee
verwenden könnte und eine benannte Pipe (mkfifo
), aber ich hatte auf eine Möglichkeit gehofft, dies inline, prägnant und ohne vorherige Einrichtung zu tun 🙂
Akzeptierte Antwort:
Sie können tee
verwenden und Prozesssubstitution dafür:
cat file.txt | tee >(pbcopy) | grep errors
Dadurch wird die gesamte Ausgabe von cat file.txt
gesendet zu pbcopy
, und Sie erhalten nur das Ergebnis von grep
auf Ihrer Konsole.
Sie können mehrere Prozesse in das tee
einfügen Teil:
cat file.txt | tee >(pbcopy) >(do_stuff) >(do_more_stuff) | grep errors