Skip to content

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

11 de Srpen de 2021
shlvl 56a5ab1c5f9b58b7d0dde75c 2db6faa9181e4a0089980677ded2c26c

Proměnná $ SHLVL vám řekne, kolik hlubokých skořápek máte. Pokud jste z toho zmatení, stojí za to začít na začátku.

Co je to skořápka?

Shell přijímá příkazy a dává tyto příkazy k provedení základnímu operačnímu systému. Na většině systémů Linux se shell program nazývá BASH (The Bourne Again Shell), ale existují i ​​jiné, včetně C Shell (tcsh) a KORN shell (ksh).

Jak přistupovat k Linux Shell

Obecně jako uživatel komunikujete s programem shell prostřednictvím programu emulace terminálu, jako je XTerm, konsole nebo gnome-terminal. Pokud spustíte správce oken, jako je Openbox, nebo desktopové prostředí, jako je GNOME nebo KDE, najdete emulátor terminálu buď z nabídky, nebo z pomlčky. Na mnoha systémech zkratka CTRL+ALT+T otevře okno terminálu. Alternativně můžete přepnout na jiný TTY (dálnopis), který poskytuje přímý přístup k prostředí příkazového řádku. To lze provést stisknutím CTRL+ALT+F1 nebo CTRL+ALT+F2.

Co je to úroveň skořápky?

Když spustíte příkaz v shellu, spustí se na úrovni shellu. V rámci shellu můžete otevřít další shell, což z něj činí podsloupku shellu, který jej otevřel. Proto je nadřazený shell považován za shell 1. úrovně a podřízený shell je shell 2. úrovně.

Jak zobrazit úroveň skořápky

Způsob, jak zjistit, na jaké úrovni shellu běžíte, je použít proměnnou $ SHLVL. Chcete -li zobrazit úroveň shellu, ve které právě běžíte, zadejte následující: echo $ SHLVL

type = „code“> Když spustíte výše uvedený příkaz v okně terminálu, vrátí se výsledek 2. Pokud však spustíte stejný příkaz pomocí tty, pak je výsledek 1. Tty nespouští desktop prostředí a je to shell 1. úrovně. Proč tomu tak je? Desktopové prostředí, které používáte, je spuštěno nad shellem. Tento shell je na úrovni 1. Každé okno terminálu, které otevřete z tohoto desktopového prostředí, je potomkem shellu, který otevíral desktopové prostředí. Úroveň shellu proto nemůže začínat na jiném čísle než 2.

Jak vytvořit podsvícení

Nejsnadnější způsob, jak otestovat koncepci skořepin a podsítí, je následující. Otevřete okno terminálu a zadejte následující: echo $ SHLVL

type = „code“> Když spustíte tento příkaz z okna terminálu, minimální úroveň shellu je 2. Do okna terminálu zadejte následující: sh

type = „code“> Příkaz sh spouští interaktivní prostředí. To znamená, že používáte shell v shellu nebo v subshell. Pokud toto zadáte znovu: echo $ SHLVL

type = „code“> Vidíte, že úroveň shellu je nastavena na 3. Spuštěním příkazu sh ze subshell se otevře subshell subshell, takže úroveň shellu je na úrovni 4.

Proč je úroveň skořápky důležitá?

Úroveň prostředí je důležitá při přemýšlení o rozsahu proměnných ve vašich skriptech. Pro jednoduchý příklad: pes = maisie
echo $ pes

type = „code“> Pokud výše uvedený příkaz spustíte v shellu, slovo maisie se zobrazí v okně terminálu. Chcete -li otevřít nový shell, zadejte následující příkaz: sh

type = „code“> Když spustíte tento příkaz, uvidíte, že se nic nevrací: echo $ dog

type = „code“> Důvodem je to, že proměnná $ dog je k dispozici pouze na úrovni shellu 2. Pokud zadáte exit, ukončíte subshell a spustíte echo $ pes opět to slovo maisie zobrazí znovu. Také stojí za to přemýšlet o chování globálních proměnných v prostředí. Otevřete nové okno terminálu a zadejte následující příkaz: export dog = maisie
echo $ pes

typ = „kód“> Podle očekávání slovo maisie zobrazí. Dále otevřete podshell a zadejte echo $ pes znovu. Tentokrát slovo maisie se zobrazí, i když jste v subshell. Důvodem je to, že příkaz export učinil proměnnou $ dog globální. Změna proměnné $ dog v subshell, i když použijete příkaz export, neovlivní její nadřazené prostředí. Znalost úrovně shellu, na které pracujete, má význam při psaní skriptů. Příklady v tomto článku jsou jednoduché, ale je běžné, že jeden shell skript zavolá jiný shell skript, který zase volá jiný shell shell. Všechny tyto běží na různých úrovních. Znalost úrovně skořápky je důležitá.