反馈stdin和两个进程的stdout

Bil*_* VB 6 linux bash shell pipe sh

我有两个进程通过stdin和stdout相互连接.

假设我有进程A和进程B.B的stdout需要提供给A的stdin,并且A的stdout需要输入到进程B的stdout.

有一种简单的方法可以在一个简单的命令中表达这种关系,还是有一个基本的shell脚本可以启用它?

提前致谢.

eph*_*ent 5

Bash 4 介绍 coproc:

declare -a FDS
coproc FDS { process_A; }
process_B <&${FDS[0]} >&${FDS[1]}
Run Code Online (Sandbox Code Playgroud)

  • 正当我认为我理解了你可以用bash做的所有有趣的fd操作...... +1. (2认同)

小智 2

看一下命名管道。创建一个从 A 到 B 的管道,以及一个从 B 到 A 的管道。然后启动 A,将其标准输出重定向到第一个管道,将其标准输入重定向到第二个管道。然后从相反的方向开始B。

它看起来像这样:

mkfifo --mode=0666 /tmp/AtoB
mkfifo --mode=0666 /tmp/BtoA
A < BtoA > AtoB
B < AtoB > BtoA
Run Code Online (Sandbox Code Playgroud)

补充:当然,他们需要某种方式来识别双方都在场。就像简单的“我在这里,你在吗?” 两者都会收到响应。

重要提示:如下面的评论所述,此过程将因两个程序都阻塞读取而死锁。需要某种形式的协调来确保这种情况不会发生。