Weiterleiten mehrerer Befehle

Ich möchte den folgenden Befehl ausführen und beide an TextEdit weiterleiten:

pmset -g; echo; pmset -g assertions | open -f -a TextEdit 

Das funktioniert nicht, es führt nur letzteres aus:

Wie?

Antworten (2)

Ahhh, bashWeiterleitung :-

( pmset -g && echo && pmset -g assertions ) | open -f -a TextEdit

Das führt Ihre Befehle als einen einzigen Bash-Befehl (das ist der Effekt von &&) in einer Sub-Shell aus (was das Einschließen in die ()tut) und leitet die Ausgabe der Sub-Shell für Sie in TextEdit um. Technisch gesehen müssen Sie &&stattdessen nicht verwenden, ;aber die Änderung bewirkt, dass die gesamte Kette an diesem Punkt angehalten wird, wenn einer der Befehle fehlschlägt.

Hinweis: In Ihrem Beispiel werden alle Befehle ausgeführt (wie Sie beweisen können, indem Sie einfach pmset -g; echo; pmset -g assertionsauf der Befehlszeile ausführen), es ist nur so, dass Sie die Pipe nur auf den letzten anwenden. Deshalb muss es in einer Subshell ausgeführt werden.

Hinweis: Sie können das |Zeichen durch ersetzen >und die Ausgabe an eine Datei senden, wenn Sie dies wünschen.

Dieser kleine Tipp war unglaublich hilfreich. Die Ins & Outs von eingebauten Befehlen/Sonderzeichen sind kaum dokumentiert. Danke nochmal.

() kombinieren die Befehle zu einem einzigen Prozess und verketten sie zu stdout:

(pmset -g; echo; pmset -g assertions) | open -f -a TextEdit