Vorrei eseguire il seguente comando e pipe stout di entrambi in TextEdit:
pmset -g; echo; pmset -g assertions | open -f -a TextEdit
Questo non funziona, esegue solo il secondo:
Come?
Aahhh, bash
reindirizzamento: -
( pmset -g && echo && pmset -g assertions ) | open -f -a TextEdit
Che esegue i tuoi comandi come un singolo comando bash (che è l'effetto di &&
) in una sotto-shell (che è ciò che lo avvolge nel ()
) e reindirizza l'output della sotto-shell in TextEdit per te. Tecnicamente non devi usare &&
invece di ;
ma l'effetto di cambiarlo è che se uno dei comandi fallisce, interromperà l'intera catena a quel punto.
Nota: nel tuo esempio tutti i comandi sono in esecuzione (come puoi provare eseguendo pmset -g; echo; pmset -g assertions
alla riga di comando), è solo che stai applicando la pipe solo all'ultimo. Ecco perché deve essere eseguito in una subshell.
Nota: potresti sostituire il |
carattere con >
e inviare l'output a un file, se lo desideri.
() combina i comandi in un singolo processo, concatenandoli allo stdout:
(pmset -g; echo; pmset -g assertions) | open -f -a TextEdit
Leggi altre domande sui tag command-line bash unix macos