Kaip ir kodėl naudosite $ SHLVL kintamąjį

Kintamasis $ SHLVL naudojamas norint pasakyti, kiek giliai jūs esate. Jei jus supainiojate, verta pradėti nuo pradžios.

Kas yra "Shell"?

Korpusas priima komandas ir suteikia jas pagrindinei operacinei sistemai atlikti. Daugumoje "Linux" sistemų apvalkalo programa vadinama BASH (The Bourne Again Shell), tačiau yra ir kitų, įskaitant "C Shell" (tcsh) ir "KORN" apvalkalo (ksh).

Kaip pasiekti "Linux" "Shell"

Paprastai kaip vartotojas bendrauja su apvalkalo programa naudodami terminalo emuliavimo programą, tokią kaip XTerm, konsole ar gnome-terminalas.

Jei naudojate "Windows" valdytoją, pvz., "Openbox" arba darbalaukio aplinką, pvz., "GNOME" arba "KDE", galite rasti terminalo emuliatorių iš meniu ar brūkšniu. Daugelyje sistemų spartusis klavišas CTRL ALT ir T taip pat atidarys terminalo langą.

Arba galite pereiti į kitą tty (teletypewriter), kuri suteikia tiesioginę prieigą prie komandų eilutės apvalkalo. Tai galite padaryti paspausdami CTRL ALT ir F1 arba CTRL ALT ir F2 ir kt.

Kas yra "Shell" lygis?

Kai paleidžiate komandą lukštelyje, ji paleidžiama kažkur vadinama apvalkalo lygiu. Per lukštą galite atidaryti kitą korpusą, kuris daro jį apvalkalu arba apvalkalu, kuris jį atidarė.

Todėl tėvų lukštais būtų laikomas galbūt lygiu 1 korpusas, o vaiko apvalkalas būtų 2 lygio lukštas.

Kaip parodyti "Shell" lygį

Remiantis straipsnio pavadinimu, neturėtų būti jokių staigmenų, nes taip galima nustatyti, kokia lukšto lygis naudojamas, naudojant kintamąjį $ SHLVL.

Norėdami pamatyti šiuo metu veikiantį apvalkalo lygį, įveskite:

echo $ SHLVL

Labai įdomu, jei paleidžiate pirmiau pateiktą komandą terminalo lange, galite nustebti, kad grąžintas rezultatas yra 2.

Tačiau jei jūs paleisti tą pačią komandą naudodami tty, rezultatas yra 1.

Kodėl taip gali būti klausimas? Na, jūsų darbalaukio aplinka paleidžiama ant viršelio. Šis lange būtų lygis 1. Bet kuris terminalo langas, kurį atidarysite iš tos darbastalio aplinkos, turi būti kriauklio, kuris atidarė darbalaukio aplinką, vaikas, todėl lukšto lygis negali prasidėti jokiu kitu numeriu nei 2.

"Tty" neveikia darbalaukio aplinkos ir todėl yra tik 1 lygio lukštas.

Kaip sukurti Subshells

Lengviausias būdas išbandyti kriauklių ir kriauklių sąvoką yra toks. Atidarykite terminalo langą ir įveskite:

echo $ SHLVL

Kaip mes žinome iš terminalo lango, minimalus apvalkalo lygis yra 2.

Dabar terminalo lange įveskite:

sh

"Sh" komanda pats sukuria interaktyvią apvalkalą, o tai reiškia, kad jūs naudojate apvalkale esantį apvalkalą arba požeminį langelį.

Jei dabar įveskite dar kartą:

echo $ SHLVL

Pamatysite, kad apvalkalo lygis yra 3. Paleidę komandą sh iš požeminio skydo, bus atidaryta subshell subsele, taigi apvalkalo lygis bus 4 lygyje.

Kodėl "Shell" lygis yra svarbus?

Apvalkalo lygis yra svarbus, kai galvoju apie kintamųjų apimtį savo scenarijose.

Pradėkime nuo paprasto dalyko:

šuo = maisie
echo $ dog

Jei paleisite aukščiau esančią komandą lukštuose, žodis maisie bus rodomas terminalo lange.

Atidarykite naują apvalkalą, įveskite šiuos duomenis:

sh

Jei paleisite šią komandą, pamatysite, kad niekas iš tikrųjų negrąžinamas:

echo $ dog

Taip yra todėl, kad "$ dog" kintamasis yra prieinamas tik esant apvalkalo lygiui 2. Jei įveskite exit, kad išeitumėte iš požeminio skydo ir paleistumėte "echo $ dog", žodis maisie vėl bus rodomas.

Taip pat verta galvoti apie globalių kintamųjų elgesį per korpusą.

Pradėkite naujame terminalo lange ir įveskite:

eksportas dog = maisie
echo $ dog

Kaip tikėjotės, rodomas žodis maisie. Dabar atidarykite subhell ir vėl įveskite echo $ dog. Šį kartą pamatysite, kad žodis maisie rodomas, net jei esate subhell.

Tai yra ta, kad eksporto komanda padarė "$ dog" kintamąjį visame pasaulyje. "$ Dog" kintamojo keitimas į subsega, net jei naudojate komandą eksporto, neturės įtakos jo tėvų lukštui.

Tikimės, kad iš to jūs pamatysite, kad žinant, kokia lukšto lygis jūs dirba, tam tikra prasme yra rašant scenarijus.

Pateikti pavyzdžiai yra labai paprastesni, tačiau vienam shell scenarijui yra gana paprastas paskambinti kitam shell scenarijų, kuris savo ruožtu vadina dar vieną skriptą, kuriame visi jie dabar veikia skirtingais lygmenimis. Žinojimas apie korpuso lygį gali būti labai svarbus.