Piping di più comandi

8

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?

    
posta njboot 18.01.2014 - 00:46
fonte

2 risposte

11

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.

    
risposta data 18.01.2014 - 01:20
fonte
4

() combina i comandi in un singolo processo, concatenandoli allo stdout:

(pmset -g; echo; pmset -g assertions) | open -f -a TextEdit
    
risposta data 18.01.2014 - 01:18
fonte

Leggi altre domande sui tag