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

问题描述 投票:1回答:1

我需要做点什么

~$ command1 | command2 | command1

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

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

shell
1个回答
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]}
  • 这会创建一个coroutine(coproc)到当前的shell,它运行一个循环,读取行,用行中的x替换u,然后再次输出它们。
  • 然后它调用ls -l并将输出发送到正在运行的协同程序。
  • 最后一行最后读取现有协同程序的输出并将其打印到stdout。

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

© www.soinside.com 2019 - 2024. All rights reserved.