Bash: Wie viele verschachtelte Sitzungen sind tief?

9

Angenommen, ich starte eine bashShell,
... und dann eine weitere bashSitzung innerhalb dieser Shell,
... und dann eine weitere bashSitzung innerhalb dieser Sitzung,
... und dann eine weitere bashSitzung innerhalb dieser Sitzung,
... (Zeiten N) usw.

Um alle N Sitzungen zu beenden, muss ich exitN-mal eingeben.

Wie finde ich heraus, wie tief ich in einer bestimmten Bash-Sitzung verschachtelt bin?

Idealerweise suche ich nach einer Umgebungsvariablen, die $STYfür Bildschirmsitzungen ähnlich ist .

tetris11
quelle

Antworten:

16

Verwenden Sie SHLVL. Von man bash:

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

Beispiel:

$ echo $SHLVL
1
$ bash
$ echo $SHLVL
2
$ bash
$ echo $SHLVL
3
heemayl
quelle
Das ist gut, aber ich habe ein kleines Problem mit meinem Setup festgestellt: - Meine .xinitrc startet eine Shell als regulären Prozess, aber eine andere mit exec(so dass beim Schließen dieses Terminals die gesamte XSession endet). $SHLVLerzeugt zwei verschiedene Nummern für diese Terminals. Gibt es eine Umgebungsvariable, die mehr Shell-spezifisch ist?
Tetris11
$BASH_SUBSHELLsah vielversprechend aus, liefert aber nicht.
Tetris11
1
@ tetris11Yeah..das ist, wie SHLVLfunktioniert..Überprüfen Sie diese Lösung, wenn es passt ..
heemayl
1
Ah, natürlich - ich kann manuell eingestellt SHLVL=0in ~/.xinitrc.
Genial