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


9

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

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

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

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

Ответы:


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

Это хорошо, но я заметил небольшую проблему с моей установкой: - мой .xinitrc запускает одну оболочку как обычный процесс, но другой использует exec(так что когда этот терминал закрывается, весь XSession завершается). $SHLVLпроизводит два разных числа для этих терминалов. Существует ли переменная окружения, более специфичная для оболочки?
tetris11

$BASH_SUBSHELLвыглядел многообещающе, но не доставляет.
tetris11

1
@ tetris11Yeah.. вот как этоSHLVL работает..проверьте это решение, если оно подходит ..
Heemayl

1
Ах, конечно , - я могу вручную установить SHLVL=0в ~/.xinitrc. Блестяще, спасибо
tetris11
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.