Kako i zašto biste koristili varijablu $ SHLVL

Varijabla $ SHLVL upotrebljava se da vam kažem koliko je dubokih ljusaka. Ako vas to zbunjuje, vrijedi početi na početku.

Što je Shell?

Shell poduzima naredbe i daje ih operacijskom sustavu za izvođenje. Na većini Linux sustava program ljuske naziva se BASH (Bourne Again Shell), ali postoje i drugi, uključujući C Shell (tcsh) i KORN shell (ksh).

Kako pristupiti Linux Shell

Općenito kao korisnik komunicirate s programom ljuske korištenjem programa emulacije terminala kao što je XTerm, konsole ili gnome-terminal.

Ako koristite upravitelj prozora kao što je Openbox ili okruženje okruženja kao što je GNOME ili KDE, naći ćete emulator terminala bilo iz izbornika ili crtice. Na mnogim sustavima prečac CTRL ALT i T će otvoriti i terminalni prozor.

Alternativno se možete prebaciti na drugi tty (teletekstpraktor) koji omogućuje izravni pristup ljusci naredbenog retka. To možete učiniti pritiskom na CTRL ALT i F1 ili CTRL ALT i F2 itd.

Što je Shell razina

Kada pokrenete naredbu u ljusci, radi se na nečem što se naziva nivoom ljuske. Unutar ljuske možete otvoriti još jednu ljusku koja ga čini potplatom ili školjkom koja ju je otvorila.

Stoga će se matična školjka smatrati možda školjkom razine 1, a školjka za dijete bi bila ljuska razine 2.

Kako prikazati Shell razinu

To ne bi trebalo biti iznenađenje temeljem naslova članka da način na koji možete reći koja je razina ljuske koju izvodite pomoću veličine $ SHLVL.

Da biste vidjeli razinu ljuske koju trenutačno izvodite, upišite sljedeće:

echo $ SHLVL

Zanimljivo, ako pokrenete gornju naredbu unutar prozora terminala, možda ćete biti iznenađeni kad vidite da je rezultat vraćen 2.

Ako, međutim, pokrenete istu naredbu pomoću tty onda je rezultat 1.

Zašto je to slučaj koji biste mogli pitati? Pa radna površina koju radite izvodi se na vrhu ljuske. Ta će ljuska biti razina 1. Svaki terminalni prozor koji otvorite unutar tog okruženja radne površine mora biti dijete ljuske koja je otvorila radnu površinu pa stoga razina ljuske ne može započeti ni u jednom broju osim 2.

TTY ne pokreće stolno okruženje i stoga je jednostavno ljuska razine 1.

Kako stvoriti Subshells

Najjednostavniji način testiranja koncepta školjaka i podgrupa je sljedeći. Otvorite prozor terminala i upišite sljedeće:

echo $ SHLVL

Kao što znamo iz terminalnog prozora minimalna razina ljuske je 2.

U prozoru terminala upišite sljedeće:

sh

Naredba sh automatski pokreće interaktivnu ljusku, što znači da koristite ljusku unutar ljuske ili podgrupe.

Ako ga ponovno upišete:

echo $ SHLVL

Vidjet ćete da je razina ljuske postavljena na 3. Pokretanje naredbe sh iz unutrašnjosti će otvoriti podgrupe podgrupe i tako će razina ljuske biti na razini 4.

Zašto je razina ljuske važno?

Razina ljuske je važna kada razmišljam o opsegu varijabli unutar vaših skripti.

Počnimo s nečim jednostavnim:

pas = Maisie
echo $ pas

Ako pokrenete gornju naredbu u ljusci riječ maisie će biti prikazana na terminalu prozoru.

Otvorite novu ljusku upisivanjem sljedećeg:

sh

Ako pokrenete ovu naredbu vidjet ćete da se ništa zapravo ne vraća:

echo $ pas

To je zato što je varijabla $ dog dostupno samo na razini ljuske 2. Ako upišete izlaz za izlaz iz subshell i pokrenete echo $ pas ponovo će se riječ maisie ponovno prikazati.

Također je vrijedno razmišljati o ponašanju globalnih varijabli unutar ljuske.

Započnite s novim terminalnim terminalom i upišite sljedeće:

izvozni pas = maisie
echo $ pas

Kao što biste očekivali, riječ maisie će biti prikazana. Sada otvorite subshell i ponovno upišite echo $ pas. Ovaj put vidjet ćete da se riječ maisie prikazuje iako ste u podzemlju.

Razlog tome je da je izvozna naredba učinila globalnu varijablu $ dog. Promjena varijable $ dog unutar subshell čak i ako koristite izvozne naredbe nema utjecaja na svoje roditeljske ljuske.

Nadamo se da možete vidjeti da znanje o razini ljuske koju radite ima neko značenje prilikom pisanja skripti.

Primjeri koje sam davao su vrlo jednostavni, ali je sasvim uobičajeno da jedna skripta za ljusku nazove drugu skriptu ljuske koja zauzvrat naziva drugu skriptu ljuske koja se sada izvodi na različitim razinama. Znanje razine ljuske može biti vrlo važno.