如何确定当前的shell是否由另一个shell加载?

当我在终端中输入`/bin/bash`时,这会启动另一个bash shell,对吗?
有没有可能通过某个命令来确定当前的bash shell是从另一个bash shell启动的?
此外,在另一个shell内启动一个shell有什么影响吗?(或者无关紧要)
3个回答

一个适用于除了之外的其他shell的版本是:
ps -p `ps h -p $$ -o ppid` -o comm=

谢谢。 (我得到的结果和enzotib的答案一样) - Zabba

使用此命令,您可以查看当前 shell 的父进程:
ps -o comm= -p $(echo $PPID)

这在bash中有效,其中定义了PPID变量,不清楚其他shell是否适用。
编辑:
正如@bmk所指出的,echo的内容过多且不必要。
ps -o comm= -p $PPID

谢谢,那个有效。我的结果是:运行ps -o comm= -p $(echo $PPID)会得到gnome-terminal。先运行/bin/bash,然后再运行ps -o comm= -p $(echo $PPID)会得到bash - Zabba
你实际上需要echo做什么?我认为它也可以不用:ps -o comm= -p $PPID - bmk
没错,ps -o comm= -p $PPID 也完美地起作用。 - Zabba
@bmk:哦,是的,我开始时用了echo $PPID,并且在没有思考的情况下进行了修改:),给enzotib扣1分。 - enzotib
@entotib:由于问题标记为“bash”,因此它没有任何问题。因此:它可以工作并且做了它应该做的事情。只是有点过度和不能与不同的shell一起使用。 - bmk

bash实际上是通过一个特殊的导出变量SHLVL来计算的。
$ echo "$SHLVL"
1
$ bash -c 'echo "$SHLVL"'
2

如果SHLVL为2,这并不一定意味着父进程是bash,它只是表示shell的一个祖先也是bash,或者另一个导出了SHLVL的进程(我想ksh也会设置它)。
你为什么需要知道你的shell的父进程是否是bash?
而且,实际上在另一个shell中运行一个shell并没有什么特别的含义。这就像在shell中运行任何其他命令一样。