Piping di più comandi


8

Vorrei eseguire il seguente comando e pipe stout di entrambi su TextEdit:

pmset -g; echo; pmset -g assertions | open -f -a TextEdit 

Questo non funziona, esegue solo quest'ultimo:

Come?

Risposte:


11

Aahhh, bashreindirizzamento: -

( pmset -g && echo && pmset -g assertions ) | open -f -a TextEdit

Questo esegue i tuoi comandi come un singolo comando bash (che è l'effetto di &&) in una sotto-shell (che è ciò che lo racchiude nelle ()azioni) 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 qualsiasi dei comandi fallisce, fermerà l'intera catena in quel punto.

Nota: Nel tuo esempio vengono eseguiti tutti i comandi (come puoi dimostrare eseguendo semplicemente pmset -g; echo; pmset -g assertionsdalla riga di comando), è solo che stai applicando la pipe solo all'ultimo. Ecco perché deve essere eseguito in una subshell.

Nota: è possibile sostituire il |carattere con >e inviare l'output a un file se lo si desidera.


Questo piccolo consiglio è stato incredibilmente utile. I dettagli di comandi / caratteri speciali incorporati sono appena documentati. Grazie ancora.
njboot,

4

() combina i comandi in un unico processo, concatenandoli a stdout:

(pmset -g; echo; pmset -g assertions) | open -f -a TextEdit
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.