Canalize stdout de dois programas entre si

Canalize stdout de dois programas entre si

Eu tenho dois programas, um deles imprime algo primeiro, eles precisam se comunicar entre si com seu IO padrão.

Existe uma maneira no Bash de canalizar o stdout de dois programas entre si? Eu sei que poderia fazer isso em C com forks e dups, mas existe uma maneira com Bash puro?

Responder1

Crie um FIFO nomeado que fará um "loop" no tubo:

mkfifo myfifo
<myfifo program1 | program2 >myfifo
rm myfifo

Mesmo que nenhum dos programas imprima nada primeiro, você pode "injetar" dados no FIFO, para que sejam recebidos por program1:

# from another console
echo start >myfifo

Para observar/armazenar a comunicação, utilize teeno(s) local(is) correto(s). Exemplos:

<myfifo program1 | program2 | tee myfifo
<myfifo program1 | tee /dev/tty ./log1 | program2 | tee ./log2 >myfifo

A coisa toda funcionará sh, não há nada específico para o Bash nesta solução.

Por favor leiaesta respostasobre possíveis cenários que levam a um impasse.

informação relacionada