Kako i zašto biste koristili $ SHLVL promenljivu

$ SHLVL varijabla se koristi da vam kaže koliko je granata duboko. Ako vas ovo zbunjuje, vredi početi od početka.

Šta je školjka?

Šuranta uzima komande i daje ih osnovnom operativnom sistemu za izvođenje. Na većini Linux sistema shell program se naziva BASH (The Bourne Again Shell), ali postoje i drugi dostupni uključujući C Shell (tcsh) i KORN shell (ksh).

Kako pristupiti Linux shell

Uopšteno, kao korisnik, komunicirate s programom shell pomoću programa emulacije terminala kao što su XTerm, konsole ili gnome-terminal.

Ako pokrećete upravitelja prozora, kao što je Openbox ili okruženje za radno okruženje, poput GNOME-a ili KDE-a, nađete ćete terminal emulator ili iz menija ili dash-a. Na mnogim sistemima prečica CTRL ALT i T će otvoriti i terminalski prozor.

Alternativno, možete prebaciti na drugi tty (teletevork) koji omogućava direktan pristup shell shell-u. To možete učiniti pritiskom na CTRL ALT i F1 ili CTRL ALT i F2 itd.

Šta je nivo školjke

Kada pokrenete komandu u shell-u, ona radi na nečemu što se naziva nivo školjke. Unutar ljuske možete otvoriti još jednu školjku koja ga čini podlogom ili školjkom koja ga je otvorila.

Prema tome, roditeljska ljuska bi se možda smatrala za ljusku nivoa 1, a dečačka ljuska bi bila granata nivoa 2.

Kako prikazati nivo školjke

Ne bi trebalo iznenaditi na osnovu naslova članka da način na koji možete navesti koji nivo školjke radite je korištenje $ SHLVL varijable.

Da biste videli nivo školjke u kome trenutno radite, unesite sledeće:

echo $ SHLVL

Interesantno, ako pokrenete gornju komandu u okviru terminala, možda ćete biti iznenađeni kada vidite da je vratiti rezultat 2.

Ako ipak pokrenete istu naredbu koristeći tty onda je rezultat 1.

Zašto je ovo slučaj koji biste mogli da pitate? Pa, radno okruženje kome radite se pokreće na vrhu ljuske. Ta granata bi bila nivo 1. Bilo koji terminalni prozor koji otvorite iz tog okruženja za radno okruženje mora biti dijete ljuske koja je otvorila radno okruženje i stoga nivo školjke ne može započeti ni u kojem drugom broju nego 2.

TTY ne pokreće radno okruženje i stoga je jednostavno lupa nivoa 1.

Kako kreirati podgrupe

Najlakši način za testiranje koncepta granata i podgrupa je sledeći. Otvorite prozor terminala i ukucajte sledeće:

echo $ SHLVL

Kao što znamo iz terminalnog prozora minimalni nivo školjke je 2.

U prozoru terminala ukucajte sledeće:

sh

Sama komanda sh pokreće interaktivnu školjku, što znači da koristite ljusku unutar granate ili podgrupe.

Ako ponovo upišete ovo:

echo $ SHLVL

Vidjet ćete da je nivo školjke podešen na 3. Pokretanje sh naredbe iz unutar podshella će otvoriti podsloj podshell-a, tako da će nivo školjke biti na nivou 4.

Zašto je nivo školjke važan?

Nivo školjke je važan kada razmišljate o opsegu varijabli unutar vaših skripti.

Počnimo sa nečim jednostavnim:

pas = maisie
echo $ pas

Ako pokrenete gornju komandu u shell-u, riječ maisie će se prikazati u prozoru terminala.

Otvorite novu školjku tako što ćete uneti sledeće:

sh

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

echo $ pas

To je zato što je varijabla $ dog dostupna samo na nivou ljuske 2. Ako upišete izlaz da izađete iz podshell-a i ponovo pokrenete echo $ dog, riječ maisie će se ponovo prikazati.

Takođe vrijedi razmišljati o ponašanju globalnih varijabli unutar ljuske.

Započnite u novom terminalu i ukucajte sledeće:

izvozni pas = maisie
echo $ pas

Kao što biste očekivali da se prikaže maisie. Sada otvorite podgrupu i ponovo otkucajte echo $ dog. Ovog puta videćete da se riječ maisie prikazuje iako ste u podsklopu.

Razlog za to je što je komanda za izvoz učinila varijantom $ dog globalnom. Promena varijable $ psa unutar poddirekcije čak i ako koristite komandu izvoza nema utjecaja na svoje roditeljske ljuske.

Nadamo se da iz ovoga možete videti da poznavanje nivoa školjke u kojem radite ima neki značaj prilikom pisanja skripti.

Primeri koje sam dao su veoma pojednostavljeni, ali je prilično često da jedna skripta skenira drugu shell skriptu koja zauzvrat naziva drugu shell skriptu, koja sve sada radi na različitim nivoima. Poznavanje nivoa školjke može biti veoma važno.