Si dhe Pse Ju do të Përdorni $ SHLVL Variable

Variabli $ SHLVL përdoret për t'ju treguar sa predha jeni të thellë. Nëse jeni të hutuar nga kjo, ia vlen të filloni në fillim.

Çfarë është një Shell?

Një predhë merr komanda dhe i jep atyre në sistemin operativ themelor për të kryer. Në shumicën e sistemeve Linux, programi shell quhet BASH (Bourne Again Shell), por ka të tjerë në dispozicion, duke përfshirë C Shell (tcsh) dhe shell KORN (ksh).

Si të hyni në Linux Shell

Në përgjithësi si një përdorues ju ndërveprojnë me programin shell përmes përdorimit të një program emulimi terminal si XTerm, konsole ose gnome-terminal.

Nëse po drejtoni një menaxher të dritareve si Openbox ose një mjedis desktop si GNOME ose KDE, ju do të gjeni një emulator terminal nga një meny ose një dash. Në shumë sisteme shkurtorja CTRL ALT dhe T do të hapë edhe një dritare terminali.

Përndryshe ju mund të kaloni në një tjetër tty (teletypewriter) i cili siguron qasje të drejtpërdrejtë në një shell komande. Mund ta bëni këtë duke shtypur CTRL ALT dhe F1 ose CTRL ALT dhe F2 etj.

Çfarë është një nivel Shell

Kur ju drejtuar një komandë në një shell ajo shkon në diçka të quajtur niveli shell. Brenda një shell ju mund të hapni një tjetër shell që e bën atë një subshell ose shell që hapi atë.

Prandaj guaska prindërore do të konsiderohet ndoshta shell 1 niveli dhe shell fëmijë do të jetë një shell nivelit 2.

Si të shfaqni nivelin e Shell

Ajo duhet të vijë si befasi në bazë të titullit të artikullit se mënyra se si mund të tregoni se cili nivel shell ju po kandidoni është duke përdorur variablin $ SHLVL.

Për të parë nivelin e shell që po aktivizoni, shkruani në vijim:

echo $ SHLVL

Përkundrazi, interesant nëse e kryeni komandën e mësipërme brenda një dritareje të terminalit mund të habiteni kur shihni se rezultati u kthye në 2.

Nëse megjithatë ju drejtuar të njëjtin komandë duke përdorur tty pastaj rezultati është 1.

Pse është kjo rasti që mund të kërkoni? E pra mjedisi desktop ju jeni duke u është duke u drejtuar në krye të një shell. Kjo shell do të ishte niveli 1. Çdo dritare e terminalit që hapet nga brenda mjedisit desktop duhet të jetë një fëmijë i shell që hapi mjedisin desktop dhe për këtë arsye niveli i shell nuk mund të fillojë në asnjë numër tjetër përveç 2.

Tty nuk po drejton një ambient desktop dhe prandaj është thjesht një shell i nivelit 1.

Si të krijoni subshells

Mënyra më e lehtë për të testuar konceptin e predhave dhe nëngrupeve është si më poshtë. Hapni një dritare terminali dhe shkruani sa vijon:

echo $ SHLVL

Siç e dimë nga një dritare terminali, niveli minimal i guaskës është 2.

Tani brenda dritares së terminalit shkruani:

sh

Sh komanda vetë e saj drejton një shell interaktive që do të thotë që ju jeni duke përdorur një shell brenda një shell ose një subshell.

Nëse e shkruani sërish këtë:

echo $ SHLVL

Ju do të shihni se niveli shell është vendosur në 3. Drejtimin e komandës sh nga brenda subshell do të hapë një subshell të subshell dhe kështu niveli shell do të jetë në nivelin 4.

Pse është e rëndësishme niveli i Shellit?

Niveli i guaskës është i rëndësishëm kur mendoni rreth fushëveprimit të variablave brenda shkrimit tuaj.

Le të fillojmë me diçka të thjeshtë:

qen = Maisie
echo $ qen

Nëse ju drejtuar komandën e mësipërme në një shell, fjala maisie do të shfaqet në dritaren e terminalit.

Hapni një predhë të re duke shtypur në vijim:

sh

Nëse e kryeni këtë komandë, do të shihni se asgjë nuk kthehet:

echo $ qen

Kjo është për shkak se variabli $ qeni është i disponueshëm vetëm në nivelin e shell. Nëse shkruani dalje për të dalë nënqendrën dhe për të drejtuar echo $ qen përsëri, fjala maisie do të shfaqet përsëri.

Gjithashtu është me vlerë të mendosh rreth sjelljes së ndryshoreve globale brenda një predhe.

Filloni në një dritare të re terminali dhe shkruani sa vijon:

eksport qeni = maisie
echo $ qen

Siç do të prisni, fjala maisie do të shfaqet. Tani hapni një subshell dhe shkruani echo $ qeni përsëri. Këtë herë do të shihni se fjala maisie shfaqet edhe pse jeni në një nënqendër.

Arsyeja për këtë është se komanda e eksportit bëri variablën $ qen globale. Ndryshimi i variablit $ qen brenda subshell edhe në qoftë se ju përdorni komandën e eksportit nuk ka ndikim në predha prindërore.

Shpresojmë që nga kjo mund të shihni se njohja e nivelit të shell që po punoni ka ndonjë rëndësi kur shkruani skriptet.

Shembujt që kam dhënë janë shumë të thjeshta, por është shumë e zakonshme që një skript shell të thërrasë një tjetër skriptë shell, e cila në anën tjetër thërret një skript tjetër të skedarit të gjithë që tani konkurrojnë në nivele të ndryshme. Njohja e nivelit të shell mund të jetë shumë e rëndësishme.