Co je to Linux Shell a jaké jsou úrovně Shell?
Proměnná $SHLVL vám říká, kolik skořápek jste hluboko. Pokud jste z toho zmateni, vyplatí se začít od začátku.

Co je Shell?
A skořápka přebírá příkazy a dává tyto příkazy základnímu operačnímu systému k provedení. Na většině systémů Linux se nazývá program shell BASH (The Bourne Again Shell), ale existují i jiné, včetně C Shell (tcsh) a KORN skořápka (ksh).
Jak získat přístup k Linux Shell
Obecně jako uživatel komunikujete s programem shell prostřednictvím a emulace terminálu program jako např XTerm, konzolenebo gnome-terminál.
Pokud spustíte správce systému Windows, jako je např Otevřít krabici 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.
Případně můžete přepnout na jiný TTY (dálnopis), který poskytuje přímý přístup k shellu příkazového řádku. Můžete to udělat stisknutím CTRL+ALT+F1 nebo CTRL+ALT+F2.
Co je úroveň Shell?
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 udělá podshell 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ň shellu
Způsob, jak zjistit, na jaké úrovni shellu běžíte, je použít proměnnou $SHLVL. Chcete-li zobrazit úroveň prostředí, ve které aktuálně běžíte, zadejte následující:
echo $SHLVL.
Když spustíte výše uvedený příkaz v okně terminálu, vrácený výsledek je 2. Pokud však spustíte stejný příkaz pomocí tty, výsledek je 1. Tty neběží na desktopovém 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. Ta skořápka je na úrovni 1. Jakékoli terminálové okno, které otevřete z tohoto desktopového prostředí, je potomkem shellu, který otevřel desktopové prostředí. Úroveň shellu proto nemůže začínat jiným číslem než 2.
Jak vytvořit podskořápky
Nejjednodušší způsob, jak otestovat koncept shellů a subshellů, je následující. Otevřete okno terminálu a zadejte následující:
echo $SHLVL.
Když tento příkaz spustíte z okna terminálu, minimální úroveň prostředí je 2.
V okně terminálu zadejte následující:
sh.
Příkaz sh spustí interaktivní shell. To znamená, že používáte shell v rámci shellu nebo subshell.
Pokud to napíšete znovu:
echo $SHLVL.
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ň shellu 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.
Pokud spustíte výše uvedený příkaz v shellu, slovo maisie zobrazí do okna terminálu.
Chcete-li otevřít nový shell, zadejte následující:
sh.
Když spustíte tento příkaz, uvidíte, že se nic nevrací:
echo $pes.
Je to proto, že proměnná $dog je dostupná pouze na úrovni shellu 2. Pokud napíšete exit pro ukončení subshell a spuštění echo $pes opět slovo maisie zobrazí znovu.
Za zamyšlení stojí také chování globálních proměnných v rámci shellu.
Otevřete nové okno terminálu a zadejte následující:
export pes=maisie
echo $pes.
Jak se očekávalo, slovo maisie displeje. Dále otevřete podshell a zadejte echo $pes znovu. Tentokrát slovo maisie zobrazí, i když se nacházíte v dílčím prostředí. Důvodem je, ž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é shelly.
Znalost úrovně shellu, ve které pracujete, má význam při psaní skriptů. Příklady v tomto článku jsou jednoduché, ale je běžné, že jeden skript Shell volá jiný skript Shell, který zase volá jiný skript Shell. Všechny tyto běží na různých úrovních. Znalost úrovně skořepiny je důležitá.