Hvad er en Linux Shell, og hvad er Shell Levels?

$SHLVL-variablen fortæller dig, hvor mange skaller dybt du er. Hvis du er forvirret over dette, er det værd at starte fra begyndelsen.

Skærmbillede af $SHLVL Linux-kommando i brug

Hvad er en Shell?

EN skal tager kommandoer og giver disse kommandoer til det underliggende operativsystem at udføre. På de fleste Linux-systemer kaldes shell-programmet BASH (The Bourne Again Shell), men der er andre, herunder C Shell (tcsh) og KORN skal (ksh).

Sådan får du adgang til Linux Shell

Generelt interagerer du som bruger med shell-programmet gennem en terminal emulering program som f.eks XTerm, konsol, eller gnome-terminal.

Hvis du kører en windows manager som f.eks Åben boks eller et skrivebordsmiljø såsom GNOME eller KDE, finder du en terminalemulator enten fra en menu eller en bindestreg. På mange systemer er genvejen CTRL+ALT+T åbner et terminalvindue.

Alternativt kan du skifte til en anden TTY (teletypewriter), som giver direkte adgang til en kommandolinjeskal. Det kan du gøre ved at trykke på CTRL+ALT+F1 eller CTRL+ALT+F2.

Hvad er et Shell-niveau?

Når du kører en kommando i en shell, kører den på shell-niveau. Inden for en skal kan du åbne en anden skal, hvilket gør den til en underskal af den skal, der åbnede den. Derfor betragtes forældreskallen som niveau 1-skallen, og barneskallen er en niveau 2-skal.

Sådan viser du skalniveauet

Måden at fortælle hvilket shell-niveau du kører på er at bruge $SHLVL-variablen. For at se det shell-niveau, du i øjeblikket kører i, skal du skrive følgende:

ekko $SHLVL. 

Når du kører ovenstående kommando i et terminalvindue, er resultatet 2. Hvis du derimod kører den samme kommando ved hjælp af tty, så er resultatet 1. Tty'en kører ikke et skrivebordsmiljø og er en niveau 1-skal.

Hvorfor er dette tilfældet? Det skrivebordsmiljø, du kører, køres oven på en shell. Den skal er niveau 1. Ethvert terminalvindue, du åbner fra det skrivebordsmiljø, er underordnet den skal, der åbnede skrivebordsmiljøet. Derfor kan skalniveauet ikke starte med et andet tal end 2.

Sådan opretter du subshells

Den nemmeste måde at teste konceptet med skaller og underskaller på er som følger. Åbn et terminalvindue, og skriv derefter følgende:

ekko $SHLVL. 

Når du kører denne kommando fra et terminalvindue, er minimumsskalniveauet 2.

Indtast følgende i terminalvinduet:

sh. 

sh-kommandoen kører en interaktiv shell. Det betyder, at du bruger en shell i en shell eller en subshell.

Hvis du skriver dette igen:

ekko $SHLVL. 

Du kan se, at skalniveauet er sat til 3. Ved at køre sh-kommandoen fra subshellen åbnes en subshell af subshellen, så skalniveauet er på niveau 4.

Hvorfor er Shell-niveau vigtigt?

Skalniveauet er vigtigt, når du tænker på omfanget af variabler i dine scripts. For et simpelt eksempel:

hund=maisie
ekko $hund.

Hvis du kører ovenstående kommando i en shell, vil ordet maisie vises til terminalvinduet.

For at åbne en ny shell skal du skrive følgende:

sh. 

Når du kører denne kommando, vil du se, at der ikke returneres noget:

ekko $hund. 

Det er fordi $dog-variablen kun er tilgængelig på shell-niveau 2. Hvis du skriver exit for at afslutte subshellen og køre ekko $hund igen ordet maisie vises igen.

Det er også værd at tænke på adfærden af ​​globale variabler inden for en skal.

Åbn et nyt terminalvindue, og skriv derefter følgende:

eksport hund=maisie
ekko $hund.

Som forventet, ordet maisie viser. Åbn derefter en subshell og skriv ekko $hund igen. Denne gang ordet maisie vises, selvom du er i en subshell. Grunden til dette er, at eksportkommandoen gjorde $dog-variablen global. Ændring af $dog-variablen i subshellen, selvom du bruger eksportkommandoen, påvirker ikke dens overordnede skaller.

At kende det skalniveau, du arbejder i, har betydning, når du skriver scripts. Eksemplerne i denne artikel er enkle, men det er almindeligt, at et shell-script kalder et andet shell-script, som igen kalder et andet shell-script. Alle disse kører på forskellige niveauer. Det er vigtigt at kende skalniveauet.