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.