Wie und warum würden Sie die Variable $ SHLVL verwenden?

Die Variable $ SHLVL wird verwendet, um anzuzeigen, wie viele Muscheln sich in Ihrer Tiefe befinden. Wenn Sie verwirrt sind, lohnt es sich, am Anfang zu beginnen.

Was ist eine Shell?

Eine Shell nimmt Befehle entgegen und gibt sie zur Ausführung an das zugrunde liegende Betriebssystem weiter. Auf den meisten Linux-Systemen heißt das Shell-Programm BASH (The Bourne Again Shell), aber es gibt auch andere Programme, darunter die C-Shell (tcsh) und die KORN-Shell (ksh).

So greifen Sie auf die Linux-Shell zu

Im Allgemeinen interagieren Sie als Benutzer mit dem Shell-Programm über ein Terminal-Emulationsprogramm wie XTerm, konsole oder gnome-terminal.

Wenn Sie einen Windows-Manager wie Openbox oder eine Desktop-Umgebung wie GNOME oder KDE ausführen, finden Sie einen Terminal-Emulator entweder über ein Menü oder einen Bindestrich. Auf vielen Systemen wird mit der Tastenkombination STRG + ALT und T auch ein Terminalfenster geöffnet.

Alternativ können Sie zu einer anderen TTY (Teletypewriter) wechseln, die direkten Zugriff auf eine Befehlszeilen-Shell bietet. Sie können dies tun, indem Sie STRG ALT und F1 oder STRG ALT und F2 usw. drücken.

Was ist ein Shell-Level?

Wenn Sie einen Befehl in einer Shell ausführen, wird er auf der Shell-Ebene ausgeführt. Innerhalb einer Shell können Sie eine andere Shell öffnen, die zu einer Subshell wird, oder die Shell, die sie geöffnet hat.

Daher wird die übergeordnete Shell möglicherweise als Shell der Ebene 1 und die untergeordnete Shell als Shell der Ebene 2 betrachtet.

So zeigen Sie die Shell-Ebene an

Anhand des Titels des Artikels sollte es keine Überraschung sein, dass Sie anhand der Variablen $ SHLVL feststellen können, in welcher Shell-Ebene Sie sich gerade befinden.

Um die aktuell ausgeführte Shell-Ebene anzuzeigen, geben Sie Folgendes ein:

echo $ SHLVL

Interessanterweise werden Sie überrascht sein, wenn Sie den obigen Befehl in einem Terminalfenster ausführen und feststellen, dass das zurückgegebene Ergebnis 2 ist.

Wenn Sie jedoch denselben Befehl mit tty ausführen, ist das Ergebnis 1.

Warum ist dies der Fall, den Sie fragen könnten? Nun, die Desktop-Umgebung, die Sie ausführen, wird auf einer Shell ausgeführt. Diese Shell hat die Ebene 1. Jedes Terminalfenster, das Sie in dieser Desktop-Umgebung öffnen, muss der Shell untergeordnet sein, die die Desktop-Umgebung geöffnet hat. Daher kann die Shell-Ebene nicht bei einer anderen Nummer als 2 beginnen.

Das tty läuft nicht in einer Desktop-Umgebung und ist daher einfach eine Level 1-Shell.

So erstellen Sie Subshells

Der einfachste Weg, das Konzept von Shells und Subshells zu testen, ist der folgende. Öffnen Sie ein Terminalfenster und geben Sie Folgendes ein:

echo $ SHLVL

Wie wir aus einem Terminalfenster wissen, ist die minimale Shell-Ebene 2.

Geben Sie nun im Terminalfenster Folgendes ein:

Sch

Der Befehl sh selbst führt eine interaktive Shell aus. Dies bedeutet, dass Sie eine Shell innerhalb einer Shell oder einer Subshell verwenden.

Wenn Sie dies jetzt erneut eingeben:

echo $ SHLVL

Sie werden sehen, dass die Shell-Ebene auf 3 gesetzt ist. Wenn Sie den Befehl sh in der Subshell ausführen, wird eine Subshell der Subshell geöffnet, und die Shell-Ebene befindet sich auf Ebene 4.

Warum ist der Shell-Level wichtig?

Die Shell-Ebene ist wichtig, wenn Sie über den Umfang der Variablen in Ihren Skripten nachdenken.

Beginnen wir mit etwas Einfachem:

hund = maisie
echo $ hund

Wenn Sie den obigen Befehl in einer Shell ausführen, wird das Wort maisie im Terminalfenster angezeigt.

Öffnen Sie eine neue Shell, indem Sie Folgendes eingeben:

Sch

Wenn Sie diesen Befehl ausführen, werden Sie feststellen, dass tatsächlich nichts zurückgegeben wird:

echo $ hund

Dies liegt daran, dass die Variable $ dog nur auf Shell-Ebene 2 verfügbar ist. Wenn Sie exit eingeben, um die Subshell zu verlassen und echo $ dog erneut auszuführen, wird das Wort maisie erneut angezeigt.

Es lohnt sich auch, über das Verhalten globaler Variablen in einer Shell nachzudenken.

Beginnen Sie in einem neuen Terminalfenster und geben Sie Folgendes ein:

export dog = maisie
echo $ hund

Wie zu erwarten, wird das Wort maisie angezeigt. Öffnen Sie nun eine Unterschale und geben Sie erneut echo $ dog ein. Dieses Mal sehen Sie, dass das Wort maisie angezeigt wird, obwohl Sie sich in einer Subshell befinden.

Der Grund dafür ist, dass der Exportbefehl die Variable $ dog global gemacht hat. Das Ändern der Variablen "$ dog" in der Subshell hat keine Auswirkungen auf die übergeordneten Shells, selbst wenn Sie den Befehl "export" verwenden.

Hoffentlich können Sie daraus ersehen, dass die Kenntnis der Shell-Ebene, in der Sie arbeiten, beim Schreiben von Skripten eine gewisse Bedeutung hat.

Die Beispiele, die wir gegeben haben, sind sehr einfach, aber es ist durchaus üblich, dass ein Shell-Skript ein anderes Shell-Skript aufruft, das wiederum ein anderes Shell-Skript aufruft, das jetzt alle auf verschiedenen Ebenen ausgeführt wird. Die Kenntnis der Shell-Ebene kann sehr wichtig sein.