Bash: Скільки вкладених сеансів глибоко?


9

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

Щоб вийти з усіх N сеансів, я повинен набрати exitN разів.

Як я можу дізнатися, наскільки глибоко я вкладений в рамках будь-якого сеансу баш?

В ідеалі я шукаю змінну середовища, схожу на $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
@ tetris11Y yes..ths як SHLVLпрацює..перевірте це рішення, якщо воно підходить ..
heemayl

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