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

Shell 如何将两个命令的STDOUT流重定向到彼此的STDIN?,shell,Shell,我需要做一些类似的事情 ~$ command1 | command2 | command1 第三个不应该是同一个程序的另一个实例,而是同一个过程。糟糕的英语,不确定我解释的是否正确,所以这里还有一次尝试用不同的方式来表达我的意思 我希望能做到以下几点: Program1打印某些内容,Program2扫描Program1打印的内容,Program2打印某些内容,Program1扫描Program2打印的内容,依此类推。对不起,如果详细学习BASH可以解决问题,那是我的错,但我没有通过谷歌找到任何

我需要做一些类似的事情

~$ command1 | command2 | command1
第三个不应该是同一个程序的另一个实例,而是同一个过程。糟糕的英语,不确定我解释的是否正确,所以这里还有一次尝试用不同的方式来表达我的意思

我希望能做到以下几点:
Program1打印某些内容,Program2扫描Program1打印的内容,Program2打印某些内容,Program1扫描Program2打印的内容,依此类推。对不起,如果详细学习BASH可以解决问题,那是我的错,但我没有通过谷歌找到任何合适的解决方案。

一般来说,从目前的情况来看,你的问题没有多大意义,因为它讨论的是一个圆中的两个处理实体(进程)。这种情况是一种母鸡/鸡蛋的情况,需要提出这样一个问题:它从哪里开始,如何结束

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

但从目前的情况来看,我认为@MarkSetchell的评论是针对你可能想做的事情。听起来您的
command2
command1
的一个协同程序,这意味着它是一个并行运行的东西,接收数据并按需返回数据。bash
bash
知道并支持这样的东西,但是它并没有被广泛使用,所以不要期望在任何地方对它有太多的支持

以下示例可能说明了该用法:

coproc SED while read a; do echo "$a" | sed 's/x/u/g'; done
ls -l 1>&${SED[1]}
cat 0<&${SED[0]}
coproc SED,同时读取a;做回显“$a”| sed's/x/u/g';完成
ls-l 1>&${SED[1]}

cat 0Maybe?也许你的意思是
command2
command1
的一个协进程。。。在纯C中,我想做的事情,C++中的事情都是用pToice完成的。在我的例子中,它应该由操作系统本身完成。这是真的吗?请不要改变你的问题;-)你问的是shell的东西,而不是C/C++的东西。当然,你可以就这个问题自由地发布关于不同方面的后续问题。我只是指出了我的意思。和C++一样,你可以用2个字符串(THEAD1 SCASNF S*S1和SeavtFS*S2,THEAD2 SCASNF S*S2和SAMPIFT-S*S1),当我有两个单线程程序时,我想用管道来完成类似的事情。当然,我要教他们彼此充分理解,避免无限循环。谢谢你瞄准科普洛克,我会发现这个主题的。