Lo siento si esta es una pregunta tonta, pero estoy tratando de lograr algo como esto, pero en una línea:
$ prog1 | prog2
$ prog1 | prog3
Entonces, básicamente quiero ejecutar prog1 y canalizar la salida a prog2 y prog3 por separado (no una tubería encadenada). Al principio, estaba tratando de usar tee pero eso no parecía correcto porque estaba volcando la salida a un archivo (que no es lo que quiero).
$ prog1 | tee prog2 | prog3 # doesn't work - creates file "prog2"
En algún momento, probablemente me gustaría extender esto a canalizar la salida a más de dos programas, pero estoy comenzando de manera simple por ahora.
$ prog1 | prog2
$ prog1 | prog3
$ prog1 | prog4
...
Respuestas:
Proceso de sustitución.
fuente
Similar a la respuesta de Ignacio, puede usar una tubería temporal con nombre
mkfifo(1)
.Es un poco más detallado, pero funcionaría en sistemas que no tienen sustitución de procesos, como
dash
. Elsleep 1
es manejar cualquier condición de carrera.fuente
Hay una pequeña placa de utilidad que hace el trabajo:
En lugar de escribir en archivos, ptee escribe en todos los fds que se proporcionan en la línea de comando.
ptee es parte de pipexec .
fuente
No necesita ningún bashism o archivos especiales o nada de eso, no en Linux de todos modos:
Destaqué los resultados
grep
resaltados para mí para mostrar que no solo eran tres resultados de la misma secuencia, sino que también eran el resultado degrep
coincidencias de proceso separadas .fuente