Cum și de ce ați folosi Variabila $ SHLVL

Variabila $ SHLVL este folosită pentru a vă spune cât de multe coajă sunt adânci. Dacă sunteți confuzi cu aceasta, merită să începeți la început.

Ce este o coajă?

O cochilie primește comenzi și le dă sistemului de operare de bază pentru a le efectua. Pe majoritatea sistemelor Linux programul shell este denumit BASH (The Bourne Again Shell), dar sunt disponibile și altele, inclusiv Shell C (tcsh) și shell-ul KORN (ksh).

Cum să accesați shell-ul Linux

În general, în calitate de utilizator, interacționați cu programul shell prin utilizarea unui program de emulare terminal , cum ar fi XTerm, console sau gnome-terminal.

Dacă executați un manager de ferestre, cum ar fi Openbox sau un mediu desktop, cum ar fi GNOME sau KDE, veți găsi un emulator terminal fie dintr-un meniu, fie dintr-o linie. În multe sisteme, comenzile CTRL ALT și T vor deschide și o fereastră terminală.

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

Ce este nivelul Shell?

Când rulați o comandă într-un shell, rulează la ceva numit nivel shell. În interiorul unei cochilii poți deschide o altă coajă care o face ca un subshell sau shell-ul care a deschis-o.

Prin urmare, carcasa părinte ar fi considerată probabil shell-ul de nivel 1, iar carcasa copilului ar fi o coajă de nivel 2.

Cum se afișează nivelul Shell

Ar trebui să nu fie o surpriză pe baza titlului articolului că felul în care puteți afla nivelul shell-ului pe care îl executați este prin utilizarea variabilei $ SHLVL.

Pentru a vedea nivelul shell-ului pe care îl executați în prezent, tastați următoarele:

echo $ SHLVL

Mai degrabă interesant dacă rulați comanda de mai sus într-o fereastră terminală s-ar putea să fiți surprins să vedeți că rezultatul returnat este de 2.

Dacă totuși executați aceeași comandă folosind tty atunci rezultatul este 1.

De ce se poate intampla asta? Ei bine, mediul desktop pe care îl executați este rulat pe partea de sus a unei cochilii. Acea coajă ar fi nivelul 1. Orice fereastră de terminal pe care o deschideți din interiorul acelei medii desktop trebuie să fie un copil al cochiliei care a deschis mediul desktop și, prin urmare, nivelul shell-ului nu poate porni la alt număr decât 2.

TTY nu rulează un mediu desktop și, prin urmare, este pur și simplu un nivel 1 shell.

Cum se creează subsheluri

Cea mai ușoară modalitate de a testa conceptul de cochilii și subshell-uri este după cum urmează. Deschideți o fereastră terminal și tastați următoarele:

echo $ SHLVL

După cum știm de la o fereastră terminală, nivelul shell-ului minim este de 2.

Acum, în fereastra terminalului, tastați următoarele:

SH

Comanda comică pe cont propriu rulează o coajă interactivă, ceea ce înseamnă că utilizați o cochilie într-un shell sau un subshell.

Dacă tastați acum din nou:

echo $ SHLVL

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

De ce este important nivelul Shell?

Nivelul de coajă este important atunci când vă gândiți la domeniul variabilelor din cadrul scenariilor dvs.

Să începem cu ceva simplu:

câine = Maisie
echo $ câine

Dacă executați comanda de mai sus într-un shell, cuvântul maisie va fi afișat în fereastra terminalului.

Deschideți o coajă nouă introducând următoarele:

SH

Dacă executați această comandă, veți vedea că nimic nu este returnat:

echo $ câine

Acest lucru se datorează faptului că variabila $ dog este disponibilă numai la nivelul shell 2. Dacă tastați ieșirea pentru a ieși din subshell și a alerga din nou câine ecou $ câine, cuvântul maisie va fi afișat din nou.

De asemenea, merită să ne gândim la comportamentul variabilelor globale în interiorul unei cochilii.

Porniți într-o nouă fereastră terminal și tastați următoarele:

câine de export = maisie
echo $ câine

După cum v-ați aștepta, cuvântul maisie este afișat. Acum, deschideți un subshell și tipați din nou câine ecou. De data aceasta veți vedea că cuvântul maisie este afișat chiar dacă sunteți într-un subshell.

Motivul pentru aceasta este că comanda de export a făcut câinele variabil global. Schimbarea variabilei $ dog în cadrul subshell-ului chiar dacă utilizați comanda de export nu are nici un efect asupra coajelor sale părinte.

Sperăm că din acest lucru puteți vedea că cunoașterea nivelului de coajă în care lucrați are o importanță semnificativă atunci când scrieți scripturi.

Exemplele pe care le-am dat sunt foarte simpliste, dar este destul de comun pentru un script de shell să numească un alt shell script care la rândul său numește un alt script shell toate acestea rulează acum la diferite nivele. Cunoașterea nivelului coajelor poate fi foarte importantă.