Ich verwende „Red Hat Enterprise Linux Server Release 7.1 (Maipo)“.
Wenn ich mich in einer Nicht-Login-Shell befinde, beginnt die Mindest-Shell-Stufe (echo $SHLVL) bei Mindeststufe 2 und steigt mit sukzessivem Sub -shells.
Aber wenn ich eine Login-Shell verwende, beginnt das minimale Shell-Level (echo $SHLVL) bei minimalem Shell-Level 2 und erhöht sich mit aufeinanderfolgenden Sub-Shells.
[Que.] Warum gibt es einen Unterschied im minimalen Shell-Level zwischen Login-Shell (beginnt bei minimalem Shell-Level 1) und Nicht-Login-Shell (beginnt bei minimalem Shell-Level 2)?
Ich verwende bash.
Akzeptierte Antwort:
Von der Bash-Manpage:
SHLVL Wird jedes Mal um eins erhöht, wenn eine bash-Instanz gestartet wird.
Wie Sie sehen, hat diese Variable nichts mit der Tatsache zu tun, ob es sich um eine Login-Shell handelt oder nicht. Es bedeutet nur, dass Ihre Bash-Shell von einer anderen Bash-Shell gestartet wurde. Da wir nicht genau wissen, was Sie tun, um Ihre Shell zu erhalten, kann ich nicht sagen, warum Sie einen verschachtelten Shell-Aufruf haben, aber hier sind einige häufige Fälle:
-
Sie starten ein neues Terminalfenster über die Befehlszeile
-
Sie verwenden eine Betriebssystemfunktion, um ein neues Terminalfenster zu starten, und diese Funktion wird implementiert, indem zuerst eine Bash gestartet wird, die dann das Terminal ausführt, das dann wiederum eine neue Shell ausführt
-
Sie haben eine rekursive
bash
Rufen Sie Ihr .bash_profile auf, das ausgeführt wird, wenn SHLVL gleich 1 ist (das klingt seltsam, aber ich habe das schon zweimal gesehen!)