如何确定当前 shell 是否已被另一个 shell 加载?

如何确定当前 shell 是否已被另一个 shell 加载?

当我在终端中输入时/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 中运行任何其他命令一样。

相关内容