Jak a proč byste použili proměnnou $ SHLVL

Proměnná $ SHLVL slouží k tomu, abyste zjistili, kolik hlubokých skořápků jste. Pokud vás to zmáčí, stojí za to začít na začátku.

Co je Shell?

Shell přebírá příkazy a dává jim základní operační systém, který má provést. Na většině systémů Linux se program shell nazývá BASH (Bourne Again Shell), ale existují i ​​jiné, včetně C Shell (tcsh) a shellu KORN (ksh).

Jak přistupovat k systému Linux Shell

Obecně jako uživatel interagujete s programem shellu pomocí programu emulace terminálu, jako je například terminál XTerm, konsole nebo gnome.

Pokud používáte správce systému Windows, jako je Openbox nebo pracovní prostředí, jako je GNOME nebo KDE, najdete emulátor terminálu buď z nabídky nebo pomlčky. Na mnoha systémech otevře také zkratka CTRL ALT a T okno terminálu.

Případně můžete přepnout na jiný tty (teletypewriter), který poskytuje přímý přístup k shellu příkazového řádku. Můžete to provést stisknutím kláves CTRL ALT a F1 nebo CTRL ALT a F2 atd.

Co je úroveň Shell?

Když spustíte příkaz ve schránce, spustí se na něčem, který se nazývá úroveň shellu. V shellu můžete otevřít další shell, který z něj dělá podsvětí nebo shell, který ji otevřel.

Proto by rodičovská skořápka mohla být považována možná za shell 1 a dětská skořápka by byla shell úrovně 2.

Jak zobrazit úroveň Shell

Nemělo by být žádné překvapení založené na názvu článku, že způsob, jak můžete zjistit, na které úrovni shellu běžíte, je pomocí proměnné $ SHLVL.

Chcete-li zobrazit úroveň shellu, kterou právě používáte, zadejte následující:

echo $ SHLVL

Je poněkud zajímavé, že pokud spustíte výše uvedený příkaz v terminálovém okně, možná vás překvapí, že se vrátí výsledek 2.

Pokud však používáte tty stejný příkaz, je výsledek 1.

Proč se tak můžete ptát? Dobré prostředí, které používáte, běží na shellu. Tento shell by měl být level 1. Každé okno terminálu, které otevřete z tohoto prostředí desktopu, musí být dítěm shellu, který otevřel prostředí plochy, a proto úroveň shellu nemůže začít s žádným číslem jiným než 2.

TTY nefunguje prostředí desktopu a proto je jednoduše shell úrovně 1.

Jak vytvářet skořepiny

Nejsnazší způsob testování konceptu skořepiny a podsvorků je následující. Otevřete okno terminálu a zadejte následující:

echo $ SHLVL

Jak víme z terminálového okna, minimální úroveň shellu je 2.

Nyní v okně terminálu zadejte následující:

sh

Příkaz sh samotný spouští interaktivní shell, což znamená, že používáte shell ve shellu nebo podsvuku.

Pokud jej znovu zadejte znovu:

echo $ SHLVL

Uvidíte, že úroveň shellu je nastavena na 3. Spuštění příkazu sh ze spodní vrstvy otevře subshell subshell, takže úroveň shellu bude na úrovni 4.

Proč je úroveň Shell důležitá?

Úroveň shellu je důležitá při uvažování o rozsahu proměnných v rámci vašich skriptů.

Začněme něčím jednoduchým:

pes = maisie
echo $ pes

Pokud spustíte výše uvedený příkaz ve schránce, zobrazí se v okně terminálu slovo maisie.

Otevřete nový shell zadáním následujícího:

sh

Pokud spustíte tento příkaz, uvidíte, že se nic skutečně nevrací:

echo $ pes

Je to proto, že proměnná $ pes je k dispozici pouze na úrovni úrovně shellu 2. Pokud zadáte exit a opustíte subshell a spustíte echo $ pes, znovu se zobrazí slovo maisie.

Je také třeba přemýšlet o chování globálních proměnných uvnitř shellu.

Začněte v novém okně terminálu a zadejte následující:

exportní pes = maisie
echo $ pes

Jak byste očekávali, že se zobrazí slovo maisie. Nyní otevřete subshell a zadejte echo $ pes znovu. Tentokrát uvidíte, že se zobrazí slovo maisie, i když jste v podsvuku.

Důvodem je to, že exportní příkaz učinil $ pes proměnnou globální. Změna proměnné $ pes v rámci subshellu, i když používáte příkaz export, nemá vliv na jeho nadřazené skořepy.

Doufejme, že z toho vidíte, že znalost úrovně prostředí, ve které pracujete, má při psaní skriptů nějaký význam.

Příklady, které jsem dala, jsou velmi zjednodušující, ale je běžné, že jeden shell skript zavolá jiný skript shellu, který naopak nazývá další skript shell, který je nyní spuštěn na různých úrovních. Znalost úrovně shellu může být velmi důležitá.