我有两个命令(命令1和命令2)输出到stdout(fd 1),我想将它们发送到一个新命令3,它准备在两个管道中接收它们,一个在命令1的stdin和其他在任何其他文件描述符中,即在fd 3中,来自command2。 我怎么能用bash做到这一点?
答案 0 :(得分:1)
这可以通过使用来自bash ref:
的process subsitution技术来完成进程替换允许引用进程的输入或输出 使用文件名。它采取
的形式≤(列表)
或
>(列表)
进程列表是异步运行的,其输入或输出 显示为文件名。
使用这种技术基本上可以读取命令的输出(上例中的列表),就像从文件中读取一样。实际上,您可以使用以下几个输入来解决您的问题:
command3 <( command1 ) <( command2 )
为此,您必须打开两个文件(作为参数接收)并从中读取。
进程替换基本上创建一个文件(/ dev / fd / XX)并使用其名称作为接收命令的输入(上例中的command3)。请记住,命令command1和command2都将异步运行,因此在启动上述命令时,您不能指望/依赖任何执行顺序。