Hogyan és miért használná a $ SHLVL változót?

A $ SHLVL változó arra szolgál, hogy megmondja, hány hüvely mélyen van. Ha ezt összezavarod, érdemes kezdeni.

Mi a Shell?

A parancsértelmező parancsokat kap, és megadja azokat az operációs rendszernek. A legtöbb Linux rendszeren a shell program neve BASH (The Bourne Again Shell), de vannak más alkalmazások is, beleértve a C Shell (tcsh) és a KORN shell (ksh).

A Linux Shell elérése

Általánosságban, mint felhasználó, akkor a shell programmal kapcsolatba lépsz egy terminál emulációs program használatával, például az XTerm, a konsole vagy a gnome-terminal segítségével.

Ha olyan Windows-kezelőt futtat, mint az Openbox vagy az asztali környezet, például a GNOME vagy a KDE, akkor egy terminál emulátort talál egy menüből vagy egy kötőjelből. Számos rendszer esetében a CTRL ALT és T parancsikon is megnyílik egy terminál ablakban.

Másik lehetőségként átválthat egy másik tty (teletypewriter) -re, amely közvetlen hozzáférést biztosít a parancssori héjhoz. Ehhez nyomja meg a CTRL ALT és F1 vagy CTRL ALT és F2 billentyűket stb.

Mi a Shell-szint?

Amikor parancsot futtatsz egy shellben, akkor valami úgynevezett shell szintre fut. A héj alatt kinyithat egy másik héjat, ami egy alsó támaszt vagy egy kagylót nyit meg.

Ezért a szülőhéj talán az 1. szintű héjnak tekintendő, és a gyermek héja egy 2. szintű héj.

A Shell szint megjelenítésének módja

Nem feltétlenül meglepő a cikk címe alapján, hogy az $ SHLVL változó használatával meg tudja állapítani, hogy melyik shell szintre fut.

A jelenleg futó shell szint megtekintéséhez írja be a következőt:

echo $ SHLVL

Inkább érdekes, ha a fenti parancsot a terminál ablakban futtatod, akkor meglepődhetsz, hogy az eredményt visszaadtad 2.

Ha azonban ugyanazt a parancsot futtatod a tty használatával, akkor az eredmény 1.

Miért kérdezheti ezt az esetet? Nos, az éppen futó asztali környezet fut a shell tetején. Ez a shell az 1. szint. Az asztali környezeten belül megnyitott terminálablaknak az asztali környezetet megnyitó héj gyermekévé kell válnia, ezért a shell szint semmilyen más számmal nem kezdődhet.

A tty nem fut asztali környezetben, ezért egyszerűen csak az 1. szintű héj.

Hogyan lehet létrehozni a Subshell-eket?

A legegyszerűbb módja annak, hogy teszteljük a héj és alátét fogalmát a következőképpen. Nyisson meg egy terminál ablakot, és írja be a következőket:

echo $ SHLVL

Mint egy terminál ablakból tudunk, a legkisebb héjszint 2.

Most a terminál ablakában írja be a következőket:

SH

Az sh parancs önmagában egy interaktív shell-ot futtat, ami azt jelenti, hogy egy shell-t vagy egy parancsmagot használsz.

Ha újra beírja ezt:

echo $ SHLVL

Láthatja, hogy a shell szintje 3-ra van állítva. Az sh parancsnak a subshellen belül történő megnyitása a subshell alsó részét nyitja meg, így a shell szintje a 4. szinten lesz.

Miért fontos a Shell szint?

A shell szint fontos, amikor a változók körét gondolkodik a szkriptekben.

Kezdjünk valami egyszerű:

dog = Maisie
echo $ kutya

Ha a fenti parancsot futtatja egy shellben, a maisie szó jelenik meg a terminál ablakban.

Nyisson meg egy új héjat az alábbiak beírásával:

SH

Ha futtatod ezt a parancsot, látni fogod, hogy semmit sem tért vissza:

echo $ kutya

Ez azért van így, mert a $ kutya változó csak a 2. héj szintjén érhető el. Ha a kilépési módot kilép a subshell-ből, és futtatja az echo $ kutyát, újra megjelenik a maisie szó.

Szintén érdemes megfontolni a globális változók viselkedését egy héj alatt.

Indítsa el az új terminál ablakot, és írja be a következőket:

export dog = maisie
echo $ kutya

Amint azt a maisie szó jelenik meg. Most nyissa meg a subshell-et, és írja be újra az echo $ kutyát. Ezúttal látni fogod, hogy a maisie szó megjelenik, még akkor is, ha alsó szintje van.

Ennek oka az, hogy az export parancs a globális dollár változót váltotta ki. Ha az export parancsot használjuk, akkor a $ kutya változó a subshellben is hatással lesz a szülői kagylóra.

Remélhetőleg ebből láthatjuk, hogy a parancsértelmező írásmódja során jelentősége van annak, hogy tudjuk, hogy a héj szintje melyikben dolgozik.

Az általam adott példák nagyon egyszerűek, de nagyon gyakori, hogy egy shell parancsfájl másik shell-parancsfájlt hív, amely viszont egy másik shell-parancsfájlt hív, amely mindegyikük jelenleg különböző szinteken fut. A shell szint ismerete nagyon fontos lehet.