
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 tee
no(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.