Skip to main content

Was ist eine Linux-Shell und was sind Shell-Ebenen?

HOW TO START | A Gary Vaynerchuk Original (April 2025)

HOW TO START | A Gary Vaynerchuk Original (April 2025)
Anonim

Die Variable $ SHLVL gibt an, wie viele Muscheln Sie tief sind. Wenn Sie davon verwirrt sind, sollten Sie am Anfang beginnen.

Was ist eine Schale?

Eine Shell nimmt Befehle an und gibt sie an das zugrunde liegende Betriebssystem weiter. Auf den meisten Linux-Systemen heißt das Shell-Programm BASH (The Bourne Again Shell), andere sind jedoch verfügbar, einschließlich der C-Shell (tcsh) und der KORN-Shell (ksh).

Zugriff auf die Linux-Shell

Im Allgemeinen interagieren Sie als Benutzer mit dem Shell-Programm über ein Terminalemulationsprogramm 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 Terminalemulator entweder über ein Menü oder einen Bindestrich. Auf vielen Systemen wird mit der Tastenkombination CTRL ALT und T auch ein Terminalfenster geöffnet.

Alternativ können Sie zu einem anderen TTY (Teletypewriter) wechseln, der 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 einer so genannten Shell-Ebene ausgeführt. Innerhalb einer Shell können Sie eine andere Shell öffnen, wodurch diese zu einer Subshell oder der Shell wird, die sie geöffnet hat.

Daher wird die übergeordnete Shell als Ebene 1 der Shell und die untergeordnete Shell eine Ebene 2 der Ebene betrachtet.

So zeigen Sie die Shell-Ebene an

Aufgrund des Titels des Artikels sollte es nicht überraschen, dass Sie mithilfe der $ SHLVL-Variable feststellen können, in welcher Shell-Ebene Sie ausgeführt werden.

Um die aktuelle Shell-Ebene anzuzeigen, geben Sie Folgendes ein:

echo $ SHLVL

Wenn Sie den obigen Befehl innerhalb eines Terminalfensters ausführen, ist es interessant, dass das Ergebnis 2 ist.

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

Warum fragen Sie das? Nun, die Desktopumgebung, die Sie ausführen, wird auf einer Shell ausgeführt. Diese Shell wäre Ebene 1. Jedes Terminalfenster, das Sie in dieser Desktop-Umgebung öffnen, muss ein Kind der Shell sein, die die Desktop-Umgebung geöffnet hat. Daher kann die Shell-Ebene nicht mit einer anderen Zahl als 2 beginnen.

Das tty betreibt keine Desktop-Umgebung und ist daher einfach eine Ebene 1-Shell.

So erstellen Sie Subshells

Der einfachste Weg, das Konzept von Schalen und Teilschalen zu testen, ist wie folgt. Öffnen Sie ein Terminalfenster und geben Sie Folgendes ein:

echo $ SHLVL

Wie wir aus einem Terminalfenster wissen, beträgt der minimale Shell-Level 2.

Geben Sie nun im Terminalfenster Folgendes ein:

Sch

Der sh-Befehl führt eine interaktive Shell aus, dh Sie verwenden eine Shell innerhalb einer Shell oder einer Subshell.

Wenn Sie das jetzt noch einmal 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. Die Shell-Ebene befindet sich also auf Ebene 4.

Warum ist die Shell-Ebene wichtig?

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

Beginnen wir mit etwas Einfachem:

hund = maisieEcho $ 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, sehen Sie, 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 hund = maisieEcho $ Hund

Wie zu erwarten, wird das Wort maisie angezeigt. Öffnen Sie nun eine Subshell 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 $ dog-Variable global gemacht hat. Das Ändern der $ dog-Variablen innerhalb der Subshell, auch wenn Sie den Exportbefehl verwenden, hat keine Auswirkungen auf die übergeordneten Shells.

Hoffentlich kann man davon ausgehen, dass die Kenntnis der Shell-Ebene, in der Sie arbeiten, beim Schreiben von Skripts eine gewisse Bedeutung hat.

Die Beispiele, die ich gegeben habe, sind sehr simpel, aber es ist üblich, dass ein Shell-Skript ein anderes Shell-Skript aufruft, das wiederum ein anderes Shell-Skript aufruft, das alle auf verschiedenen Ebenen ausgeführt wird. Die Shell-Ebene zu kennen, kann sehr wichtig sein.