scripts script programas programacion manejo linea leer insertar fichero ejemplos comando cadenas bash shell process pipe subshell

programas - scripts bash ejemplos



Pipe mĂșltiples comandos en un solo comando (3)

En Windows sería como sigue: (echo zzz & echo aaa & echo kkk) | sort (echo zzz & echo aaa & echo kkk) | sort

O si está dentro de un archivo por lotes, puede ser línea mono (como muestra) así como multilínea:

( echo zzz echo aaa echo kkk ) | sort

Nota: la publicación original no menciona que es solo para Linux, así que agregué la solución para la línea de comandos de Windows ... es muy útil cuando se trabaja con VHD / VHDX con diskpart dentro de los scripts ( echo diskpart_command ) en lugar del eco en el Lo mismo, pero deja el echo , también hay otra forma sin ecos y con > redirector, pero es muy propenso a los errores y mucho más complejo de escribir (¿por qué usar una forma propensa a los errores si existe de una manera simple que siempre funciona? bien) ... también recuerde que %d% le da la ruta real (muy útil para no codificar la ruta de los archivos VHD / VHDX).

¿Cómo puedo canalizar la salida estándar de varios comandos a un solo comando?

Ejemplo 1: combine y ordene la salida de los tres comandos de eco:

echo zzz; echo aaa; echo kkk

salida deseada:

aaa kkk zzz

Ejemplo 2: reescriba lo siguiente para que todos los comandos estén en una sola línea de comandos utilizando tuberías, sin redireccionar a un archivo temporal:

setopt > /tmp/foo; unsetopt >> /tmp/foo; set >> /tmp/foo; sort /tmp/foo


Puede usar {} para esto y eliminar la necesidad de un sub-shell como en (list) , así:

{ echo zzz; echo aaa; echo kkk; } | sort

Necesitamos un carácter de espacio en blanco después de { y antes } . También necesitamos lo último ; Cuando la secuencia se escribe en una sola línea.

También podríamos escribirlo en múltiples líneas sin la necesidad de ninguna ; :

Ejemplo 1:

{ echo zzz echo aaa echo kkk } | sort

Ejemplo 2:

{ setopt unsetopt set } | sort


Utilice paréntesis () para combinar los comandos en un solo proceso, que concatene el stdout de cada uno de ellos.

Ejemplo 1 (tenga en cuenta que $ es el indicador de la shell):

$ (echo zzz; echo aaa; echo kkk) | sort aaa kkk zzz


Ejemplo 2:

(setopt; unsetopt; set) | sort