Skip to content

Hoe en waarom u de $SHLVL-variabele zou gebruiken

3 de augustus de 2021
shlvl 56a5ab1c5f9b58b7d0dde75c 2db6faa9181e4a0089980677ded2c26c

De variabele $SHVLL vertelt je hoeveel shells diep je bent. Als je hierdoor in de war bent, is het de moeite waard om bij het begin te beginnen.

Wat is een schelp?

Een shell neemt commando’s op en geeft deze commando’s aan het onderliggende besturingssysteem om uit te voeren. Op de meeste Linux-systemen heet het shell-programma BASH (The Bourne Again Shell), maar er zijn andere, waaronder de C Shell (tcsh) en de KORN-shell (ksh).

Toegang krijgen tot de Linux Shell

Over het algemeen communiceer je als gebruiker met het shell-programma via een terminal-emulatieprogramma zoals XTerm, konsole of gnome-terminal. Als u een Windows-manager zoals Openbox of een desktopomgeving zoals GNOME of KDE gebruikt, vindt u een terminalemulator via een menu of een streepje. Op veel systemen is de sneltoets CTRL+ALT+T opent een terminalvenster. Als alternatief kunt u overschakelen naar een andere TTY (teletypewriter), die directe toegang biedt tot een opdrachtregel-shell. U kunt dit doen door op te drukken CTRL+ALT+F1 of CTRL+ALT+F2.

Wat is een Shell-niveau?

Wanneer u een opdracht in een shell uitvoert, wordt deze uitgevoerd op shell-niveau. Binnen een shell kun je een andere shell openen, waardoor het een subshell wordt van de shell die deze heeft geopend. Daarom wordt de bovenliggende shell beschouwd als de shell van niveau 1 en is de onderliggende shell een shell van niveau 2.

Het schaalniveau weergeven

De manier om te zien in welk shell-niveau je draait, is door de $SHVLL-variabele te gebruiken. Typ het volgende om het shell-niveau te zien waarin u zich momenteel bevindt: echo $SHVLL

type=”code”> Wanneer u de bovenstaande opdracht in een terminalvenster uitvoert, is het resultaat 2. Als u echter dezelfde opdracht uitvoert met de tty, is het resultaat 1. De tty voert geen bureaublad uit omgeving en is een schaal van niveau 1. Waarom is dit het geval? De desktopomgeving die u gebruikt, wordt op een shell uitgevoerd. Die shell is niveau 1. Elk terminalvenster dat u vanuit die desktopomgeving opent, is een kind van de shell die de desktopomgeving opende. Daarom kan het shell-niveau niet beginnen bij een ander nummer dan 2.

Subshells maken

De eenvoudigste manier om het concept van shells en subshells te testen is als volgt. Open een terminalvenster en typ het volgende: echo $SHLVL

type=”code”> Wanneer u deze opdracht uitvoert vanuit een terminalvenster, is het minimale shell-niveau 2. Typ het volgende in het terminalvenster: sh

type=”code”> Het sh commando voert een interactieve shell uit. Dit betekent dat je een shell binnen een shell of een subshell gebruikt. Als je dit nogmaals typt: echo $SHLVL

type=”code”> U ziet dat het shell-niveau is ingesteld op 3. Als u het sh-commando uitvoert vanuit de subshell, wordt een subshell van de subshell geopend, en dus bevindt het shell-niveau zich op niveau 4.

Waarom is Shell-niveau belangrijk?

Het shell-niveau is belangrijk bij het nadenken over de reikwijdte van variabelen in uw scripts. Voor een eenvoudig voorbeeld: hond=maisie
echo $hond

type=”code”> Als u de bovenstaande opdracht in een shell uitvoert, wordt het woord maisie wordt weergegeven in het terminalvenster. Typ het volgende om een ​​nieuwe shell te openen: sh

type=”code”> Wanneer u deze opdracht uitvoert, ziet u dat er niets wordt geretourneerd: echo $dog

type=”code”> Dat komt omdat de $dog-variabele alleen beschikbaar is op shell-niveau 2. Als u exit typt om de subshell te verlaten en uit te voeren echo $hond nogmaals, het woord maisie weer verschijnt. Het is ook de moeite waard om na te denken over het gedrag van globale variabelen binnen een shell. Open een nieuw terminalvenster en typ het volgende: export dog=maisie
echo $hond

type=”code”> Zoals verwacht, het woord maisie toont. Open vervolgens een subshell en typ echo $hond nog een keer. Deze keer het woord maisie wordt weergegeven, ook al bevindt u zich in een subshell. De reden hiervoor is dat het export-commando de $dog-variabele globaal heeft gemaakt. Het wijzigen van de $dog-variabele in de subshell, zelfs als u het exportcommando gebruikt, heeft geen invloed op de bovenliggende shells. Het kennen van het shell-niveau waarin u werkt, is van belang bij het schrijven van scripts. De voorbeelden in dit artikel zijn eenvoudig, maar het is gebruikelijk dat het ene shellscript een ander shellscript aanroept, dat op zijn beurt een ander shellscript aanroept. Deze lopen allemaal op verschillende niveaus. Het is belangrijk om het schaalniveau te kennen.