Canalice la salida estándar de dos programas entre sí

Canalice la salida estándar de dos programas entre sí

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 teeen 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.

información relacionada