Bash: Ile głębokich sesji zagnieżdżonych?


9

Powiedzmy, że rozpoczynam bashpowłokę,
... a następnie kolejną bashsesję z tej powłoki,
... i kolejną bashsesję z tej sesji,
... a następnie kolejną bashsesję z tej sesji,
... (razy N) itp.

Aby wyjść ze wszystkich N sesji, muszę wpisać exitN razy.

Jak mogę dowiedzieć się, jak głęboko jestem zagnieżdżony w ramach danej sesji bash?

Idealnie szukam zmiennej środowiskowej podobnej do $STYsesji ekranowych.

Odpowiedzi:


16

Zastosowanie SHLVL. Od man bash:

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

Przykład:

$ echo $SHLVL
1
$ bash
$ echo $SHLVL
2
$ bash
$ echo $SHLVL
3

Jest to dobre, ale zauważyłem niewielki problem z moją konfiguracją: - mój .xinitrc uruchamia jedną powłokę jako zwykły proces, ale inny używa exec(tak, że kiedy ten terminal zostanie zamknięty, cała XSession kończy się). $SHLVLtworzy dwie różne liczby dla tych terminali. Czy istnieje zmienna środowiskowa, która jest bardziej specyficzna dla powłoki?
tetris11,

$BASH_SUBSHELLwyglądał obiecująco, ale nie zapewnia.
tetris11,

1
@ tetris11Yeah..to jak to działa .. SHLVLzaznacz to rozwiązanie, jeśli pasuje ..
heemayl

1
Ach, oczywiście - mogę ustawić ręcznie SHLVL=0w ~/.xinitrc. Genialne, dzięki
tetris11
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.