我想知道我是否递归调用了 shell,有没有简单的方法可以找出答案?有没有特定于 shell 的解决方案?我正在使用 bash。
答案1
echo $SHLVL
来自 bash 手册页:
SHLVL 每次启动 bash 实例时加一。
答案2
一种方法是使用 pstree:
$ pstree -h
[...]
├─sshd─┬─sshd───sshd───bash───bash───bash───bash───bash───pstree
│ └─sshd───sshd───bash───bash───bash───bash
[...]
答案3
echo $SHLVL
如果你做类似的事情,就会发现这个问题:
[sharpestmarble@sandbox ~]$ bash
尽管这不会捕获类似通过 SSH 进入本地主机的情况。
[sharpestmarble@sandbox ~]$ ssh localhost
答案4
同样有用:$BASH_SUBSHELL
$ echo $SHLVL
1
$ (echo $SHLVL)
1
$ echo $BASH_SUBSHELL
0
$ (echo $BASH_SUBSHELL)
1
$ ( (echo $BASH_SUBSHELL) )
2