Hasta donde sé, puedo usar el comando tee para dividir la salida estándar en la pantalla y otros archivos:
command -option1 -option2 argument | tee file1 file2 file3
¿Es posible redirigir la salida a comandos en lugar de archivos usando tee, para que teóricamente pueda crear una cadena de comandos?
command-line
pipe
tee
Abdul Al Hazred
fuente
fuente
Respuestas:
Puede usar canalizaciones con nombre ( http://linux.die.net/man/1/mkfifo ) en la línea de
tee
comandos y hacer que los comandos se lean en las canalizaciones con nombre.Cuando
command
finalice,tee
cerrará las tuberías con nombre, lo que indicará un EOF (lectura de 0 bytes) en cada uno de los/tmp/dataN
que normalmente terminaría loscmdN
procesos. Ejemplo real:Debido a los procesos en segundo plano, el shell devolvió un mensaje antes de la salida del programa. Las tres instancias de
wc
terminado normalmente.fuente
/tmp/data/{0,1,2}
. Por otra parte, en bash, podría usar la sustitución de procesos y omitir pormkfifo
completoSi entiendo correctamente, está buscando el equivalente de
tee file1 file2 file3
, pero en lugar de escribir los mismos datos en tres archivosfile1
,file2
yfile3
desea canalizar los mismos datos en tres comandoscmd1
,cmd2
ycmd3
, es decirdebe ser equivalente a
excepto que
…
solo se ejecutaría una vez.Hay dos maneras de hacerlo.
Ksh93, bash y zsh admiten la sustitución de procesos . Esta es una generalización de canalizaciones que permite que el argumento de un comando sea un archivo que, cuando se escribe, pasa datos como entrada a un comando (también existe la variante de entrada que, cuando se lee, obtiene la salida de datos mediante un comando) . Es decir,
grabados
hello
en la salida estándar y, además, se ejecutacmd1
conhello
como entrada.Entonces, por ejemplo, si desea duplicar la entrada de
somecommand
y pasarla a amboscmd1
ycmd2
, puede usarSi su shell no admite la sustitución de procesos, puede utilizar canalizaciones con nombre. Vea la respuesta de Arcege para saber cómo funciona. Las canalizaciones con nombre son menos convenientes que la sustitución de procesos porque debe crearlas y eliminarlas, e iniciar y sincronizar procesos manualmente. Tienen la ventaja de ser totalmente portátiles, mientras que no todos los shells admiten sustituciones de procesos. También se pueden usar en escenarios distintos de aquellos para los que es la sustitución de procesos.
Bajo el capó, en algunos sistemas, la sustitución de procesos utiliza tuberías con nombre internamente. Sin embargo, en la mayoría de los sistemas, se basa en archivos con nombre que representan descriptores de archivos .
fuente
pee
demoreutils
.Al menos en bash puedes saltarte
mkfifo
usando la sustitución de procesos:o para adoptar el ejemplo de Arcege
fuente
Me sorprende que nadie haya mencionado el
pee
comando de moreutils ( https://joeyh.name/code/moreutils ).fuente