Mi az a Linux Shell és mik azok a shell szintek?

A $SHLVL változó megmondja, hány shell mélységben vagy. Ha ez megzavarta, érdemes az elején kezdeni.

Képernyőkép a használatban lévő $SHLVL Linux parancsról

Mi az a Shell?

A héj parancsokat vesz, és ezeket a parancsokat a mögöttes operációs rendszernek hajtja végre. A legtöbb Linux rendszeren a shell programot hívják BASH (The Bourne Again Shell), de vannak mások is, köztük a C Shell (tcsh) és a KORN héj (ksh).

Hogyan lehet elérni a Linux Shell-t

Általában felhasználóként a shell programmal a terminál emuláció program, mint pl XTerm, konzol, vagy gnome-terminál.

Ha futtat egy Windows Managert, mint pl Nyitott doboz vagy asztali környezet, például GNOME vagy KDE, egy terminálemulátort vagy menüből vagy kötőjelből találhat. Sok rendszeren a parancsikon CTRL+ALT+T megnyit egy terminál ablakot.

Alternatív megoldásként válthat másik TTY-re (teletypewriter), amely közvetlen hozzáférést biztosít a parancssori shellhez. Ezt a gomb megnyomásával teheti meg CTRL+ALT+F1 vagy CTRL+ALT+F2.

Mi az a Shell szint?

Ha parancsértelmezőben futtat egy parancsot, az a shell szintjén fut. A héjon belül megnyithat egy másik héjat, ami az azt megnyitó héj részhéjává teszi. Ezért a szülőhéjat 1. szintű héjnak, a gyermekhéjat pedig 2. szintű héjnak tekintjük.

A shell-szint megjelenítése

A $SHLVL változó használatával állapíthatja meg, hogy melyik shell-szinten fut. A jelenleg futó shell-szint megtekintéséhez írja be a következőket:

echo $SHLVL. 

Ha a fenti parancsot terminálablakban futtatja, a visszaadott eredmény 2. Ha azonban ugyanazt a parancsot futtatja a tty használatával, akkor az eredmény 1. A tty nem futtat asztali környezetet, és egy 1. szintű shell.

Miért van ez így? Az Ön által futtatott asztali környezet egy shell tetején fut. Ez a shell 1. szintű. Az adott asztali környezetből megnyitott bármely terminálablak az asztali környezetet megnyitó shell gyermeke. Ezért a shell szint nem kezdődhet 2-n kívül más számmal.

Hogyan készítsünk alhéjakat

A héjak és alhéjak fogalmának tesztelésének legegyszerűbb módja a következő. Nyisson meg egy terminálablakot, majd írja be a következőket:

echo $SHLVL. 

Amikor ezt a parancsot terminálablakból futtatja, a minimális shell szint 2.

Írja be a következőt a terminál ablakba:

SH. 

Az sh parancs egy interaktív parancsértelmezőt futtat. Ez azt jelenti, hogy shell-t használsz egy shellben vagy egy alhéjban.

Ha újra beírod:

echo $SHLVL. 

Látja, hogy a shell szintje 3-ra van állítva. Az sh parancs futtatása az alhéjból megnyílik az alhéj egy részhéja, így a shell szintje a 4. szinten van.

Miért fontos a Shell szint?

A shell-szint fontos, ha a szkriptekben lévő változók hatókörét gondoljuk át. Egy egyszerű példa kedvéért:

kutya=maisie
echo $kutya.

Ha a fenti parancsot shellben futtatja, akkor a szó maisie megjelenik a terminál ablakában.

Új shell megnyitásához írja be a következőt:

SH. 

Amikor futtatja ezt a parancsot, látni fogja, hogy nem ad vissza semmit:

echo $kutya. 

Ez azért van, mert a $dog változó csak a 2. shell szinten érhető el. Ha az exit beírásával kilép az alhéjból és fut echo $kutya ismét a szó maisie ismét megjelenik.

Érdemes elgondolkodni a globális változók shell-en belüli viselkedésén is.

Nyisson meg egy új terminálablakot, majd írja be a következőket:

export dog=maisie
echo $kutya.

Ahogy az várható volt, a szó maisie megjeleníti. Ezután nyisson meg egy alhéjat, és írja be echo $kutya újra. Ezúttal a szó maisie akkor is megjelenik, ha egy alhéjban van. Ennek az az oka, hogy az export parancs globálissá tette a $dog változót. A $dog változó módosítása az alhéjban, még akkor sem, ha az export parancsot használja, nincs hatással a szülő shellekre.

Szkriptek írásakor fontos, hogy ismerje a shell-szintet, amelyen dolgozik. A cikkben található példák egyszerűek, de gyakran előfordul, hogy az egyik shell-szkript meghív egy másik shell-szkriptet, amely viszont egy másik shell-szkriptet hív meg. Mindezek különböző szinteken futnak. A héj szintjének ismerete fontos.