Hoe en wêrom't jo de $ SHLVL fariabele brûke

De fariabele $ SHLVL wurdt brûkt om jo te fertellen hoefolle skelpen djip binne jo. As jo ​​dêrmei ferwiksele binne, is it begjint te begjinnen.

Wat is in shell?

In shell nimt kommando's en jout se oan it ûndersteande bestjoeringssysteem om út te fieren. Op de measte Linux-systemen wurdt it shellprogramma hjitte BASH (De Bourne Again Shell), mar der binne oaren beskikber mei de C Shell (tcsh) en de KORS shell (ksh).

Hoe jo de Linux-shell te besjen

Algemien as brûker jo ynteraksje mei it shellprogramma troch it gebrûk fan in terminal emulaasjeprogramma lykas XTerm, konsole of gnome-terminal.

As jo ​​in finstersmanager wurde lykas Openbox of in buroblêd-omjouwing lykas GNOME of KDE kinne jo in terminalemulator fine fan in menu of in priz. Op in soad systeemen sil de fluchtoets CTRL ALT en T in ekstern finster iepenje.

Alternatyf kinne jo oanjaan nei in oare tty (teletypewriter) dy't direkte tagong krije ta in kommando line shell. Jo kinne dit dwaan troch te drukken op CTRL ALT en F1 of CTRL ALT en F2 ensfh.

Wat is in shellnivo

As jo ​​in kommando yn in shell rinne, rint it oan wat it shellnivo neamd wurdt. Binnen in shell kinne jo in oare shell iepene, dy't it in subshell makket of de shell dy't it iepene hat.

Dêrom soe de heule shell as miskien de nivo 1 shell beskôge wurde en de bernshell soe in nivo 2 shell wêze.

Hoe To Shell-nivo sjen litte

It moat as gjin ferrassing basearre wurde op 'e titel fan it artikel dat de wize wêrop jo fertelle kinne hokker shellnivo jo ynfierd is troch de $ SHLVL-fariabele te brûken.

Om it shellnivo sjen te litten dat jo op it stuit aktyf binne yn it type:

echo $ SHLVL

Faak ynteressant as jo it boppesteande kommando binnen in terminalfinster fytse, kinne jo ferrast wurde om te sjen dat it resultaat weromjûn is 2.

As jo ​​lykwols itselde kommando brûke mei de tty dan is it resultaat 1.

Wêrom is dit it gefal dat jo freegje kinne? Well it buroblêd-omjouwing dat jo laitsje, wurdt boppe op in shell rinne. Dizze shell soe nivo 1 wêze. Alle terminal finster dy't jo iepenje fan binnen dat buroblêd-omjouwing moatte in bern fan 'e shell wêze dat de buroblêd-omjouwing iepene en dus it shellnivo kin net oarspronklik begjinne as 2.

De tty leit net in buroblêd omjouwing en is dêrom gewoan in nivo 1 shell.

Hoe meitsje subsydzjes

De maklikste manier om it konsept fan skelpen en subshells te testen is as folgjend. Iepenje in terminalfinster en typ it folgjende:

echo $ SHLVL

As we witte fan in terminalfinster is it minimum-shell-nivo 2.

No dan binnen it terminalfinster de folgjende:

sh

It behearsking fan 'e eigen lans rint in ynteraktive shell dy't betsjut dat jo in shell brûke binnen in shell of in subshell.

As jo ​​dit no wer ynfiere:

echo $ SHLVL

Jo sjogge dat it shellnivo ynsteld is 3 Laadje it sh-kommando út binnen it subshell sil in subshell fan it subshell iepene en sa sil it shellnivo op nivo 4 wêze.

Wêrom is de shellnivo wichtich?

It shellnivo is wichtich as jo tinke oer it gebiet fan fariabelen yn jo skripts.

Litte wy begjinne mei wat ienfâldich:

hûn = maisie
echo $ hûn

As jo ​​it hjirboppe kommando yn in shell útfiere, sil it wurd maisie werjûn wurde oan it terminalfinster.

Iepenje in nije shell troch de folgjende te typen:

sh

As jo ​​dit kommando útfiere, sille jo sjen dat der neat werjûn is:

echo $ hûn

Dat is om't de $ hânfariabele allinich te krijen is op 'e shellnivo 2. As jo ​​de útgong type ynfiere om it subshell út te fieren en echo $ hûn wer te starten sil it wurd maisie wer werjûn wurde.

It is ek te leauwen oan it gedrach fan globale fariabelen binnen in shell.

Start yn in nije terminalfinster en typ it folgjende:

eksport dog = maisie
echo $ hûn

As jo ​​ferwachtsje dat it wurd maisie werjûn wurdt. Iepenje in subshell en typ echo $ hûn wer. Dizze kear sille jo sjen dat it wurd maisie werjûn is as jo yn in subshell binne.

De reden dêrfoar is dat it eksportbeheech de globale wrâldhannelsgrutte makke hat. It feroarjen fan de $ hânfariabele binnen it subshell, sels as jo it eksportekommando brûke, hat gjin ynfloed op har memmebokken.

Hypfully fan dat kinst sjen dat it witten fan 'e skelppegel dy't jo wurkje yn wat hat betsjutting as skripts skriuwt.

De foarbylden dy't ik joech, binne tige simpele, mar it is hiel gewoan foar ien shell skript om in oar skelleskript op te roppen, dat op 'en oere skriuwt in oar skelleskript dat allegear op ferskate nivo's rint. It witten fan it shellnivo kin hiel wichtich wêze.