Kako in zakaj bi uporabili $ SHLVL spremenljivko

Spremenljivka $ SHLVL se uporablja, da vam pove, koliko si lupine globoko. Če ste zmedeni s tem, je vredno začeti na začetku.

Kaj je školjka?

Lupina zavzame ukaze in jim omogoča, da izvajajo osnovni operacijski sistem. V večini sistemov Linux program lupine imenujemo BASH (The Bourne Again Shell), vendar so na voljo še drugi, vključno s C shell (tcsh) in lupino KORN (ksh).

Kako dostopati do Linux Shell

Na splošno kot uporabnik interaktivno sodelujete z lupinskim programom z uporabo terminalskega emulacijskega programa, kot sta XTerm, konsole ali gnome-terminal.

Če imate nameščen upravljalnik oken, kot je Openbox ali namizno okolje, kot sta GNOME ali KDE, boste našli emulator terminalov iz menija ali pomišljaja. Na mnogih sistemih bo bližnjica CTRL ALT in T odprla tudi terminalsko okno.

Lahko pa preklopite tudi na drug tty (teletypewriter), ki omogoča neposreden dostop do ukazne vrstice ukazne vrstice. To lahko storite s pritiskom na CTRL ALT in F1 ali CTRL ALT in F2 itd.

Kaj je nivo školjk

Ko v ukazni lupini zaženete ukaz, se obrne na nekaj, kar se imenuje raven lupine. V lupini lahko odprete še eno lupino, ki jo naredi podsklop ali lupino, ki jo je odprla.

Zato bi bila starševska lupina morda raven lupine 1, otroška lupina pa bi bila raven 2.

Kako prikazati nivo školjk

Na podlagi naslova članka ne bi bilo presenečenje, da lahko s pomočjo spremenljivke $ SHLVL navedete, na kateri ravni se izvaja lupina.

Če si želite ogledati nivo lupine, ki se trenutno izvaja, vnesite naslednje:

echo $ SHLVL

Zanimivo je, če zagnate zgornji ukaz znotraj terminalskega okna, morda boste presenečeni, ko boste videli, da je vrnjeni rezultat 2.

Če pa zaženete isti ukaz z uporabo tty, je rezultat 1.

Zakaj bi se to lahko zgodilo? No, namizno okolje, ki ga izvajate, se izvaja na vrhu lupine. Ta lupina bi bila raven 1. Vsako terminalsko okno, ki ga odprete v tem namiznem okolju, mora biti otrok lupine, ki je odprlo namizno okolje, zato se raven lupine ne more začeti z nobeno drugo številko kot 2.

Tty ne deluje z namiznim okoljem in je zato preprosto lupina ravni 1.

Kako ustvariti podlage

Najlažji način za testiranje koncepta lupin in podvrst je naslednji. Odprite terminalsko okno in vnesite naslednje:

echo $ SHLVL

Kot vemo iz terminalskega okna je najmanjša raven lupine 2.

V oknu terminala vnesite naslednje:

sh

Z ukazom sh sam izvaja interaktivno lupino, kar pomeni, da uporabljate lupino znotraj lupine ali podplate.

Če ga znova vnesete:

echo $ SHLVL

Videli boste, da je raven lupine nastavljena na 3. Z zagonom ukaza sh iz poddela boste odprli podcelino podsklopa, tako da bo raven lupine na ravni 4.

Zakaj je raven školjke pomembna?

Raven lupine je pomembna pri razmišljanju o obsegu spremenljivk znotraj vaših skriptov.

Začnimo z nečim preprostim:

pes = maisie
echo $ pes

Če zaženete zgornji ukaz v lupini, se beseda maisie prikaže v terminalskem oknu.

Odprite novo lupino, tako da vnesete naslednje:

sh

Če boste zagnali ta ukaz, boste videli, da nič ni dejansko vrnjeno:

echo $ pes

To je zato, ker je $ psi spremenljivka na voljo le pri ravni 2 lupine. Če vrnete izstop, da zapustite podsklop in znova zaženete echo $ psa, se znova prikaže beseda maisie.

Prav tako je vredno razmišljati o vedenju globalnih spremenljivk znotraj lupine.

Zaženite v novem terminalskem oknu in vnesite naslednje:

izvozni pes = maisie
echo $ pes

Kot bi pričakovali, da bo prikazana beseda maisie. Zdaj odprite podvrsto in znova vtipkajte echo $ dog. Tokrat boste videli, da se beseda maisie prikaže, čeprav ste v podsklopu.

Razlog za to je, da je ukaz za izvoz naredil spremenljivko $ dog globalno. Spreminjanje spremenljivke $ dog v podomestju, tudi če uporabljate ukaz za izvoz, ne vpliva na svoje matične lupine.

Upajmo, da iz tega lahko vidite, da poznavanje ravni lupine, v kateri delate, ima nekaj pomena pri pisanju skriptov.

Primeri, ki sem jih navedel, so zelo poenostavljeni, vendar pa je za enega skripta lupine povsem običajno, da pokliče drug skriptni skript, ki nato pokliče še en skriptni ukaz, ki se zdaj izvaja na različnih ravneh. Poznavanje nivoja lupine je lahko zelo pomembno.