为什么一个subshell of an interactive shell 运行 as an interactive shell?

Why does a subshell of an interactive shell run as an interactive shell?

在我的 Bash 会话中,我 运行 这个命令:

(echo $$ $BASHPID $-)

然后我得到

22108 25602 himBH

所以,我的子shell 运行s 作为一个互动 shell。

如果我尝试运行在后台执行相同的命令

(echo $$ $BASHPID $-) &

我得到相同的输出。为什么 subshell 运行 作为一个交互式 shell?

子shell 继承父的所有特征,包括设置。这是 subshell 定义的一部分。 运行 在前景或背景中都没有区别 - 作业可以很容易地在前景和背景之间交换。

非子shell 不会互动。例如,如果我输入

(echo $$ $BASHPID $-)

到名为 gash.sh 的脚本中,然后从非交互式 shell:

中调用它
$ bash gash.sh
73879 73880 hB

但是如果我获取文件,那么它是交互式 shell:

的子shell
$ . ./gash.sh
1130 himBH