发送两个进程将管道输出到双管道输入过程

时间:2018-06-11 10:34:04

标签: bash redirect pipe

我有两个命令(命令1和命令2)输出到stdout(fd 1),我想将它们发送到一个新命令3,它准备在两个管道中接收它们,一个在命令1的stdin和其他在任何其他文件描述符中,即在fd 3中,来自command2。 我怎么能用bash做到这一点?

1 个答案:

答案 0 :(得分:1)

这可以通过使用来自bash ref:

process subsitution技术来完成
  

进程替换允许引用进程的输入或输出   使用文件名。它采取

的形式      

≤(列表)

     

     

>(列表)

     

进程列表是异步运行的,其输入或输出   显示为文件名。

使用这种技术基本上可以读取命令的输出(上例中的列表),就像从文件中读取一样。实际上,您可以使用以下几个输入来解决您的问题:

command3 <( command1 ) <( command2 )

为此,您必须打开两个文件(作为参数接收)并从中读取。

进程替换基本上创建一个文件(/ dev / fd / XX)并使用其名称作为接收命令的输入(上例中的command3)。请记住,命令command1和command2都将异步运行,因此在启动上述命令时,您不能指望/依赖任何执行顺序。