将两个程序的标准输出通过管道传输到对方

将两个程序的标准输出通过管道传输到对方

我有两个程序,其中一个首先打印一些内容,它们需要通过标准 IO 相互通信。

Bash 中是否有办法将两个程序的标准输出相互传输?我知道我可以在 C 中使用 forks 和 dups 来实现这一点,但是有没有办法使用纯 Bash?

答案1

创建一个名为 FIFO 的管道“循环”程序:

mkfifo myfifo
<myfifo program1 | program2 >myfifo
rm myfifo

即使没有任何程序首先打印任何内容,您也可以将数据“注入”到 FIFO 中,以便通过以下方式接收数据program1

# from another console
echo start >myfifo

要观察/存储通信,请tee在正确的位置使用。示例:

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

整个过程将在 中运行sh,该解决方案中没有任何特定于 Bash 的内容。

请阅读这个答案关于可能导致僵局的情况。

相关内容