为何单命令管道不会在子shell中执行?
Bash管道的子shell特性验证
我翻了bash 4.4.19的官方手册,里面对管道(Pipelines)的定义挺清楚的:
管道是由控制操作符
|或|&分隔的一个或多个命令组成的序列。格式为:[time [-p]] [ ! ] command [ [|||&] command2 ... ]
手册里还提到一个很关键的特性:管道中的每个命令都作为独立进程执行(即在子shell中)。这个特性其实很好验证,我给你展示下实际操作中的表现:
$ pwd /Users/ravron $ ls | grep src # 先确认src目录存在 src $ cd src | true # 尝试在管道里执行cd命令 $ pwd # 查看当前目录,发现根本没变化 /Users/ravron
你看,虽然我们执行了cd src命令,但因为它是在管道里的子shell进程中运行的,子shell执行完就退出了,父shell的当前工作目录完全没受到影响。这就直观证明了手册里说的管道命令在子shell执行的特性。
内容的提问来源于stack exchange,提问作者ravron
相关产品推荐
相关产品推荐

