当我在终端中输入时/bin/bash
,它会启动另一个 bash shell,对吗?
是否可以通过某些命令找出当前 bash shell 是否已从另一个 bash shell 启动?
另外,在另一个 shell 中启动一个 shell 意味着什么?(或者这无所谓)
答案1
除以下 shell 外,还适用于以下版本bash
:
ps -p `ps h -p $$ -o ppid` -o comm=
答案2
通过此命令你可以看到当前 shell 的父进程:
ps -o comm= -p $(echo $PPID)
这在定义变量bash
的地方有效PPID
,在其他 shell 中不知道。
编辑
正如 @bmk 注意到的,这些echo
东西是多余的,没有必要:
ps -o comm= -p $PPID
答案3
bash 实际上通过一个特殊的导出变量来计算SHLVL
。
$ echo "$SHLVL"
1
$ bash -c 'echo "$SHLVL"'
2
但是,如果 SHLVL 为 2,则并不一定意味着父进程是 bash,而只是意味着 shell 的祖先之一也是 bash,或者是另一个已导出 SHLVL 的进程(我认为 ksh 也设置了它)。
为什么你需要知道你的 shell 的父级是否是 bash?
不,在一个 shell 中运行另一个 shell 实际上没有任何意义。这就像在 shell 中运行任何其他命令一样。