Ich möchte den folgenden Befehl und Pipe Stout von beiden zu TextEdit ausführen:
pmset -g; echo; pmset -g assertions | open -f -a TextEdit
Dies funktioniert nicht, es führt nur letzteres aus:
Wie?
quelle
Ich möchte den folgenden Befehl und Pipe Stout von beiden zu TextEdit ausführen:
pmset -g; echo; pmset -g assertions | open -f -a TextEdit
Dies funktioniert nicht, es führt nur letzteres aus:
Wie?
Aahhh, bash
Weiterleitung: -
( pmset -g && echo && pmset -g assertions ) | open -f -a TextEdit
Dadurch werden Ihre Befehle als einzelner Bash-Befehl (das ist der Effekt von &&
) in einer Sub-Shell ausgeführt (was das ist, was in die ()
Do-Funktion eingeschlossen wird) und die Ausgabe der Sub-Shell für Sie in TextEdit umgeleitet. Sie technisch müssen nicht verwendet werden, &&
anstatt ;
aber die Wirkung , die sie der Änderung ist , dass , wenn eine der Befehle fehlschlagen wird , die gesamte Kette an diesem Punkt zu stoppen.
Hinweis: In Ihrem Beispiel werden alle Befehle ausgeführt (wie Sie anhand pmset -g; echo; pmset -g assertions
der Befehlszeile beweisen können ). Sie wenden die Pipe nur auf den letzten an. 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:
quelle