Мне интересно, рекурсивно ли я вызывал оболочку, есть ли простой способ узнать? Есть ли какое-то решение для оболочки? Я использую bash.
echo $SHLVL
На странице руководства bash:
SHLVL Увеличивается на единицу при каждом запуске экземпляра bash.
Один из способов - использовать pstree:
$ pstree -h
[...]
├─sshd─┬─sshd───sshd───bash───bash───bash───bash───bash───pstree
│ └─sshd───sshd───bash───bash───bash───bash
[...]
echo $SHLVL
Это поймает, если вы сделаете что-то вроде:
[sharpestmarble@sandbox ~]$ bash
Хотя это не поймает что-то вроде SSH в localhost.
[sharpestmarble@sandbox ~]$ ssh localhost
Также полезно: $BASH_SUBSHELL
$ echo $SHLVL
1
$ (echo $SHLVL)
1
$ echo $BASH_SUBSHELL
0
$ (echo $BASH_SUBSHELL)
1
$ ( (echo $BASH_SUBSHELL) )
2