如何将2个命令的STDOUT流重定向到彼此STDIN?

时间:2017-12-21 13:24:02

标签: shell

我需要做类似

的事情
~$ command1 | command2 | command1

第三个不应该是同一个程序的另一个实例,而是同一个程序。英语不好,不确定我是否正确解释过,所以再试一次以不同的方式说出我的意思..

我希望能够完成以下工作: Program1打印一些东西,Program2扫描Program1打印的内容,Program2打印一些东西,Program1扫描Program2打印的东西,依此类推。对不起,如果详细了解BASH可以解决这个问题,我的错,但我没有通过谷歌找到任何合适的解决方案。

1 个答案:

答案 0 :(得分:1)

总的来说,按照现状,你的问题没有多大意义,因为它讨论了一个圆圈中的两个处理实体(流程)。这种情况是一个母鸡/蛋的情况,并要求问题从哪里开始,它是如何结束的。

所以也许你想告诉我们更多关于你的具体用例的内容,然后我们可以在不同的层面上提供更好的建议来解决你手头的问题。

但是考虑到它的立场,只是更自由一点,我认为@ mark-setchell的评论针对你可能想做的事情。听起来你的command2command1的协程,这意味着它是一个并行运行的东西,接收数据并按需递送数据。 bash知道这样的事情并支持它,但这并没有被广泛使用,所以不要期望在任何地方获得很多支持。

一个例子可以说明用法:

coproc SED while read a; do echo "$a" | sed 's/x/u/g'; done
ls -l 1>&${SED[1]}
cat 0<&${SED[0]}
  • 这会为当前shell创建一个协程(coproc),它运行一个循环,读取行,将x替换为行中的u,然后再次输出它们。
  • 然后调用ls -l并将输出发送到正在运行的协程。
  • 最后一行最后读取现有协同程序的输出并将其打印到stdout。

最后两个步骤可以重复完成,因为协同程序一直在运行。