Linux 在shell中执行管道组件的顺序
在这里执行的顺序是什么?或者,如果Linux 在shell中执行管道组件的顺序,linux,shell,pipe,Linux,Shell,Pipe,在这里执行的顺序是什么?或者,如果|和wc只是ls的参数?在表达式ls | wc中,shell将大致执行以下操作: 启动两个子外壳A和B,A的标准输出连接到B的标准输入 在子shell A中,启动命令ls 在subshell B中,启动命令wc 等待所有子shell终止 将$?设置为子shell B的退出状态(即wc的退出状态) bash主页包含更多详细信息: 管道 管道是一个由一个或多个命令组成的序列,由以下命令之一分隔: 控制运算符|或|&。管道的格式为: ls | wc 命令的标准输出通
|
和wc
只是ls
的参数?在表达式ls | wc
中,shell将大致执行以下操作:
ls
wc
$?
设置为子shell B的退出状态(即wc
的退出状态)bash
主页包含更多详细信息:
管道
管道是一个由一个或多个命令组成的序列,由以下命令之一分隔:
控制运算符|
或|&
。管道的格式为:
ls | wc
命令的标准输出通过管道连接到command2的标准输入。此连接在任何重定向之前执行
由命令指定(请参见下面的重定向)。如果使用了|&
,则
命令的标准错误连接到command2的标准输入
通过管道;它是2>和的简写形式。这含蓄
标准错误的重定向在任何重定向之后执行
由命令指定
管道的返回状态是最后一个管道的退出状态
命令,除非启用了pipefail
选项。如果pipefail
为
启用时,管道的返回状态为最后一个
(最右边)以非零状态退出的命令,如果全部为零,则为零
命令成功退出。如果保留字代码>位于
管道,该管道的出口状态为
退出状态如上所述。shell等待所有命令
在管道中,在返回值之前终止
如果时间
保留字位于管道之前,则经过的时间以及
当
管道终止。-p
选项将输出格式更改为
由POSIX指定。TIMEFORMAT
变量可以设置为
指定如何显示定时信息的字符串;
请参阅下面Shell变量下的TIMEFORMAT
说明
管道中的每个命令都作为单独的进程执行(即
子壳)
不,ls不处理管道参数,这是由shell完成的
ls命令的stdout的内容作为来自stdin的wc的输入
ls[stdout]|*[stdin]*wc-l
wc命令将获取该标准输出内容作为输入
在这里,这两个命令由shell作为不同的进程执行。
这意味着两者都有不同的PID
要验证您自己的答案,请使用ps | cat。您可以看到不同的过程cat和ps
[time [-p]] [ ! ] command [ [|│|&] command2 ... ]
PID TTY TIME CMD
11695 pts/1 00:00:00 bash
12207 pts/1 00:00:00 ps
12208 pts/1 00:00:00 cat