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?
Ahhh, bash
Weiterleitung :-
( 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 assertions
auf 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.
() kombinieren die Befehle zu einem einzigen Prozess und verketten sie zu stdout:
(pmset -g; echo; pmset -g assertions) | open -f -a TextEdit
njboot