![bash:在语法上交换两个命令,但保持相同的执行顺序](https://linux22.com/image/178770/bash%EF%BC%9A%E5%9C%A8%E8%AF%AD%E6%B3%95%E4%B8%8A%E4%BA%A4%E6%8D%A2%E4%B8%A4%E4%B8%AA%E5%91%BD%E4%BB%A4%EF%BC%8C%E4%BD%86%E4%BF%9D%E6%8C%81%E7%9B%B8%E5%90%8C%E7%9A%84%E6%89%A7%E8%A1%8C%E9%A1%BA%E5%BA%8F.png)
考虑命令链:
cmd1 | cmd1 | cmd2
问题:如何在语法上交换cmd1
and cmd2
(以便cmd1
将其放置在 之后cmd2
,链的末尾),但保持原来的执行顺序(以便cmd1
在 之前执行cmd2
)?
答案1
cmd1 | cmd1 | cmd2
可以替换为:
cmd1 | cmd2 < <(cmd1)
<(cmd1)
将 的输出更改cmd1
为文件描述符,并以类似管道的方式<
将其输入。cmd2
您不能简单地更改保留管道运算符 ( |
) 的命令顺序,因为它会链接命令的输入和输出,并且更改命令的顺序会更改整个命令的含义。