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