我有两个程序,其中一个首先打印一些内容,它们需要通过标准 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 的内容。
请阅读这个答案关于可能导致僵局的情况。