Canalizar múltiples comandos

8

Me gustaría ejecutar el siguiente comando y la tubería sólida de ambos en TextEdit:

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

Esto no funciona, solo ejecuta lo último:

¿Cómo?

njboot
fuente

Respuestas:

11

Aahhh, bashredirección: -

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

Eso ejecuta sus comandos como un solo comando bash (ese es el efecto de &&) en un sub-shell (que es lo que lo envuelve ()) y redirige la salida del sub-shell en TextEdit para usted. Técnicamente, no tiene que usarlo en &&lugar de hacerlo, ;pero el efecto de cambiarlo es que si alguno de los comandos falla, se detendrá toda la cadena en ese punto.

Nota: en su ejemplo, todos los comandos se están ejecutando (como puede probar simplemente ejecutando pmset -g; echo; pmset -g assertionsen la línea de comandos), es solo que está aplicando la tubería solo al último. Es por eso que debe ejecutarse en una subshell.

Nota: si lo desea, puede reemplazar el |carácter >y enviar la salida a un archivo.

Tony Williams
fuente
Este pequeño consejo ha sido increíblemente útil. Los entresijos de los comandos integrados / caracteres especiales apenas están documentados. Gracias de nuevo.
njboot
4

() combina los comandos en un solo proceso, concatenándolos en stdout:

(pmset -g; echo; pmset -g assertions) | open -f -a TextEdit
l'L'l
fuente