Ce este un Shell Linux și ce sunt nivelurile Shell?

Variabila $SHLVL vă spune câte cochilii sunteți adânc. Dacă ești confuz de acest lucru, merită să începi de la început.

Captură de ecran a comenzii Linux $SHLVL în uz

Ce este un Shell?

A coajă preia comenzi și dă aceste comenzi sistemului de operare de bază pentru a le executa. Pe majoritatea sistemelor Linux, programul shell este numit BASH (The Bourne Again Shell), dar există și altele, inclusiv C Shell (tcsh) și KORN coajă (ksh).

Cum să accesați Linux Shell

În general, ca utilizator, interacționați cu programul shell printr-un emulare terminală program precum XTerm, konsole, sau gnome-terminal.

Dacă rulați un manager de Windows, cum ar fi Cutie deschisa sau un mediu desktop cum ar fi GNOME sau KDE, veți găsi un emulator de terminal fie dintr-un meniu, fie dintr-o liniuță. Pe multe sisteme, scurtătura CTRL+ALT+T deschide o fereastră de terminal.

Alternativ, puteți trece la un alt TTY (teletypewriter), care oferă acces direct la un shell de linie de comandă. Puteți face acest lucru apăsând CTRL+ALT+F1 sau CTRL+ALT+F2.

Ce este un nivel Shell?

Când rulați o comandă într-un shell, aceasta rulează la nivel de shell. Într-o carcasă, puteți deschide o altă carcasă, ceea ce o face o subcoasta care a deschis-o. Prin urmare, shell-ul părinte este considerat shell de nivel 1, iar shell-ul copil este un shell de nivel 2.

Cum să afișați nivelul Shell

Modul de a spune în ce nivel de shell rulați este să utilizați variabila $SHLVL. Pentru a vedea nivelul de shell în care rulați în prezent, tastați următoarele:

echo $SHLVL. 

Când rulați comanda de mai sus într-o fereastră de terminal, rezultatul returnat este 2. Dacă, totuși, executați aceeași comandă folosind tty, atunci rezultatul este 1. Tty-ul nu rulează un mediu desktop și este un shell de nivel 1.

De ce este acesta cazul? Mediul desktop pe care îl rulați este rulat deasupra unui shell. Acea carcasă este nivelul 1. Orice fereastră de terminal pe care o deschideți din acel mediu desktop este un copil al shell-ului care a deschis mediul desktop. Prin urmare, nivelul shell-ului nu poate începe cu niciun alt număr decât 2.

Cum se creează subshell-uri

Cel mai simplu mod de a testa conceptul de shell-uri și subshell-uri este următorul. Deschideți o fereastră de terminal, apoi introduceți următoarele:

echo $SHLVL. 

Când rulați această comandă dintr-o fereastră de terminal, nivelul minim de shell este 2.

Introduceți următoarele în fereastra terminalului:

SH. 

Comanda sh rulează un shell interactiv. Aceasta înseamnă că utilizați un shell într-un shell sau un subshell.

Dacă tastați asta din nou:

echo $SHLVL. 

Vedeți că nivelul shell-ului este setat la 3. Rularea comenzii sh din subshell deschide un subshell al subshell-ului și astfel nivelul shell-ului este la nivelul 4.

De ce este important nivelul Shell?

Nivelul shell-ului este important atunci când te gândești la domeniul de aplicare al variabilelor din scripturile tale. Pentru un exemplu simplu:

dog=maisie
echo $câine.

Dacă rulați comanda de mai sus într-un shell, cuvântul maisie se afișează în fereastra terminalului.

Pentru a deschide un nou shell, tastați următoarele:

SH. 

Când rulați această comandă, veți vedea că nu se returnează nimic:

echo $câine. 

Asta pentru că variabila $dog este disponibilă numai la nivelul shell 2. Dacă tastați exit pentru a ieși din subshell și rulați echo $câine din nou, cuvântul maisie se afișează din nou.

De asemenea, merită să ne gândim la comportamentul variabilelor globale într-un shell.

Deschideți o nouă fereastră de terminal, apoi introduceți următoarele:

export dog=maisie
echo $câine.

După cum era de așteptat, cuvântul maisie afișează. Apoi, deschideți un subshell și tastați echo $câine din nou. De data aceasta, cuvântul maisie se afișează chiar dacă vă aflați într-un subshell. Motivul pentru aceasta este că comanda de export a făcut ca variabila $dog să fie globală. Schimbarea variabilei $dog din subshell, chiar dacă utilizați comanda de export, nu afectează shell-urile părinte.

Cunoașterea nivelului de shell în care lucrați are o semnificație atunci când scrieți scripturi. Exemplele din acest articol sunt simple, dar este obișnuit ca un script shell să apeleze un alt script shell care, la rândul său, apelează un alt script shell. Toate acestea rulează la diferite niveluri. Cunoașterea nivelului cochiliei este importantă.