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