我似乎误解了创建子 shell 的 Bash 规则。我认为括号总是会创建一个子shell,它作为自己的进程运行。
然而,情况似乎并非如此。在代码片段 A(如下)中,第二个sleep命令不在单独的 shell 中运行(由pstree在另一个终端中确定)。但是,在代码片段 B 中,第二个sleep命令确实在单独的 shell中运行。片段之间的唯一区别是第二个片段在括号内有两个命令。
有人可以解释一下何时创建子shell的规则吗?
代码片段 A:
sleep 5
(
sleep 5
)
Run Code Online (Sandbox Code Playgroud)
代码片段 B:
sleep 5
(
x=1
sleep 5
)
Run Code Online (Sandbox Code Playgroud)