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