it-swarm-es.tech

¿Se puede canalizar la salida de un comando a otros dos comandos?

¿Cómo puedo canalizar la salida de un comando a la entrada de otros dos comandos simultáneamente?

28
Richard Hoskins

Parece que el comando tee hará lo que quieras.

La clave es usar

>( )

para sustitución de proceso . Con tee, use el siguiente patrón:

tee >(proc1) >(proc2) >(proc3) | proc4

Entonces, si desea utilizar la salida de ls como entrada a dos programas grep diferentes, guarde la salida de cada grep en archivos diferentes y canalice todos los resultados a través de less, prueba:

ls -A | tee >(grep ^[.] > hidden-files) >(grep -v ^[.] > normal-files) | less

Los resultados de la ls -A se "canalizará" en ambos greps. El archivo hidden-files tendrá el contenido de la salida del primer grep, y normal-files tendrá los resultados del segundo grepTodos los archivos se mostrarán en el localizador less. [~ # ~] editar [~ # ~] : lo que ves en less es el la misma salida exacta de ls -A, no el resultado de greps. Si desea modificar la salida de ls -A a less, (por ejemplo, cambiando el orden para que los archivos normales se enumeren antes de los ocultos) y luego intente esto:

ls -A | tee >(grep ^[.]) >(grep -v ^[.]) >/dev/null | less

Sin >/dev/null, la salida de greps se agregaría a la salida de ls -A en lugar de reemplazarlo.

fuente

59
Ben

Utilice "tee".

Ejemplo:

grep someSearchString someFile | tee /dev/tty | wc -l > grepresult

Esto enviará la salida del comando grep tanto a la terminal como a wc (cuya salida a su vez se redirige al archivo grepresult).

"Tee" se explica en el artículo de Wikipedia tee (comando). Central es: "El comando tee lee la entrada estándar, luego escribe su contenido en la salida estándar y lo copia simultáneamente en los archivos o variables especificados".

6
Peter Mortensen