Bash: Сколько вложенных сессий глубоко?

9

Скажем, я запускаю bashоболочку,
... а затем еще один bashсеанс из этой оболочки,
... а затем еще один bashсеанс из этого сеанса,
... а затем еще один bashсеанс из этого сеанса
... (раз N) и т. Д.

Чтобы выйти из всех N сессий, я должен набрать exitN раз.

Как мне узнать, насколько глубоко я вложен в какой-либо данный сеанс bash?

В идеале я ищу переменную среды, похожую $STYна экранные сессии.

tetris11
источник

Ответы:

16

Использование SHLVL. От man bash:

SHLVL  Incremented by one each time an instance of bash is started.

Пример :

$ echo $SHLVL
1
$ bash
$ echo $SHLVL
2
$ bash
$ echo $SHLVL
3
heemayl
источник
Это хорошо, но я заметил небольшую проблему с моей установкой: - мой .xinitrc запускает одну оболочку как обычный процесс, но другой использует exec(так что когда этот терминал закрывается, весь XSession завершается). $SHLVLпроизводит два разных числа для этих терминалов. Существует ли переменная окружения, более специфичная для оболочки?
tetris11
$BASH_SUBSHELLвыглядел многообещающе, но не доставляет.
tetris11
1
@ tetris11Yeah.. вот как этоSHLVL работает..проверьте это решение, если оно подходит ..
Heemayl
1
Ах, конечно , - я могу вручную установить SHLVL=0в ~/.xinitrc. Блестяще, спасибо
tetris11