
Tengo dos programas, uno de ellos imprime algo primero, necesitan comunicarse entre sí con su IO estándar.
¿Hay alguna manera en Bash de canalizar la salida estándar de dos programas entre sí? Sé que podría hacer esto en C con bifurcaciones y dups, pero ¿hay alguna manera con Bash puro?
Respuesta1
Cree un FIFO con nombre que "hará un bucle" en la tubería:
mkfifo myfifo
<myfifo program1 | program2 >myfifo
rm myfifo
Incluso si ninguno de los programas imprime nada primero, puede "inyectar" datos en el FIFO, para que los reciba program1
:
# from another console
echo start >myfifo
Para observar/almacenar la comunicación, utilícela tee
en el(los) lugar(es) correcto(s). Ejemplos:
<myfifo program1 | program2 | tee myfifo
<myfifo program1 | tee /dev/tty ./log1 | program2 | tee ./log2 >myfifo
Todo funcionará en sh
, no hay nada específico de Bash en esta solución.
Por favor leeesta respuestasobre posibles escenarios que conduzcan a un punto muerto.