linux 如何确定执行组合重定向的命令中的操作顺序?

linux 如何确定执行组合重定向的命令中的操作顺序?

正如我们所知,从以下命令中,输出less --help | grep -i examine被重定向到文件检查较少的文件, linux 是否使用类似于BODMAS rule数学中的通用运算顺序?

less --help | grep -i examine > examine-files-in-less

答案1

管道中涉及的所有命令(例如问题中的命令)(几乎)同时启动。

这意味着管道中的命令例如

find . ...some other arguments... | sort | uniq -c | sort -nr

都是并行运行的。

然而,由于一个命令的输出是下一个命令的输入,并且由于命令等待输入被传送和输出被消耗,因此数据同步管道中的命令。

例如,在上面的管道中,最后一个将运行,但在第一个管道消耗完sort所有输出之前不会做太多事情(排序操作要求findsort全部已读取可用数据)。

因此,数据强制从左到右排序加工由管道完成。

在其他复合命令中,例如列表

ls -l; cat somefile

这与以下相同

ls -l
cat somefile

有严格的从左到右的顺序。在完成cat之前不会开始。ls

在复合命令中,例如

test -f filename || echo 'no such file'

还有严格的从左到右的顺序,在这里,如果返回零退出状态,echo则不会执行。test

另请参见,例如,“布尔测试 && 和 || 的问题在bash中“ 和 ”逻辑运算符与分号的优先级”。

相关内容