Sie haben tatsächlich den richtigen Begriff1 gefunden. Es gibt eine Umgebungsvariable, SHLVLdie alle wichtigen interaktiven Shells (bash, tcsh, zsh) beim Start um 1 erhöht. Wenn Sie also eine Shell innerhalb einer Shell starten, wird sie SHLVLum 1 erhöht.
Dies beantwortet Ihr Anliegen jedoch nicht direkt, da SHLVLes Dinge wie Terminalemulatoren überträgt. In meiner typischen Konfiguration $SHLVList z. B. 2 in einem xterm, da Ebene 1 der Shell entspricht, in der meine X-Sitzung ( ~/.xinitrcoder ~/.xsession) ausgeführt wird.
Was ich tue, ist $SHLVLin meiner Eingabeaufforderung anzuzeigen , aber nur, wenn der übergeordnete Prozess der Shell eine andere Shell ist (mit Heuristiken wie "Wenn sein Name mit shoptionaler Interpunktion und Ziffern endet , ist es eine Shell"). Auf diese Weise habe ich einen offensichtlichen visuellen Hinweis für den seltenen Fall, dass eine Shell unter einer anderen Shell ausgeführt wird.
Vielleicht möchten Sie lieber Shells erkennen, die direkt unter einem Terminalemulator ausgeführt werden. Sie können dies ziemlich genau tun: Dies sind die Shells, deren übergeordneter Prozess ein anderes steuerndes Terminal hat, so dass ps -o tty= -p$$und ps -o tty= -p$PPIDunterschiedliche Ausgaben produzieren. Sie können SHLVLin diesen Shells manuell auf 1 zurücksetzen oder Ihre eigene TERMSHLVLin diesen Shells auf 1 setzen (und ansonsten erhöhen).
¹ Auch
wenn man es sich auf den Manualseiten nicht vorstellen würde: Keine der drei Shells, die dies unterstützen, enthält das Wort „Level“ in ihrer Dokumentation von SHLVL.