ls | wc
按什么顺序ls
and wc
在这里执行?或者是|
and wc
只是论点ls
?
在表达式中ls | wc
,您的 shell 将大致执行以下操作:
- 启动两个子 shell A 和 B,A 的标准输出连接到 B 的标准输入。
- 在子 shell A 中,启动命令
ls
- 在子 shell B 中,启动命令
wc
- 等待所有子 shell 终止
- set
$?
到子 shell B 的退出状态(即wc
)
The bash
联机帮助页有更多详细信息:
管道
管道是由一个或多个命令组成的序列,由其中之一分隔
控制操作符|
or |&
。管道的格式为:
[time [-p]] [ ! ] command [ [|│|&] command2 ... ]
标准输出为command通过管道连接到标准输入command2。此连接在任何重定向之前执行
由命令指定(参见REDIRECTION
以下)。如果|&
被使用时,
命令的标准错误连接到command2的标准输入
通过管道;它是简写2>&1 |
。这种隐含的
标准错误的重定向是在任何重定向之后执行的
由命令指定。
管道的返回状态是最后一个管道的退出状态
命令,除非pipefail
选项已启用。如果pipefail
是
启用后,管道的返回状态是最后一个值
(最右边)命令以非零状态退出,如果全部则为零
命令成功退出。如果保留字!
在一个之前
管道,该管道的退出状态是逻辑非
退出状态如上所述。 shell 等待所有命令
在返回值之前终止管道。
If the time
保留字位于管道之前,经过的以及
当执行时,会报告其执行所消耗的用户和系统时间
管道终止。这-p
选项将输出格式更改为
由 POSIX 指定。这TIMEFORMAT
变量可以设置为某种格式
指定如何显示计时信息的字符串;
参见描述TIMEFORMAT
在下面的 Shell 变量下。
管道中的每个命令都作为单独的进程执行(即,在
一个子外壳)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)