GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum beginnt $shlvl in Nicht-Anmelde-Shells auf Stufe 2, in Anmelde-Shells in Rhel 7 jedoch auf Stufe 1?

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!)


Linux
  1. Warum überprüft Bashrc, ob die aktuelle Shell interaktiv ist?

  2. Warum unterbricht eine „sudo -i“-Login-Shell ein Here-doc-Befehlszeichenfolge-Argument?

  3. Warum sind interaktive Shells standardmäßig auf Osx-Login-Shells?

  4. Warum funktioniert das Parent Shell Here-Dokument nicht für Unterbefehle in Dash, aber Bash funktioniert?

  5. Warum funktioniert die Regex in Bash nur, wenn es sich um eine Variable handelt und nicht direkt?

Was ist der Unterschied zwischen Login- und Non-Login-Shell

Warum funktioniert „zip“ in einer For-Schleife, wenn die Datei existiert, aber nicht, wenn sie nicht existiert?

Warum funktioniert dieses „beim Lesen“ in einem Terminal, aber nicht in einem Shell-Skript?

Was sind die verschiedenen Arten von Shells in Linux?

Was macht Rackspace in der Cloud?

Warum benötigt der 'bin'-Benutzer eine Login-Shell?