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.

tetris11
źródło

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
heemayl
źródło
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