A skořápka je základní rozhraní pro zadávání příkazů v systému Linux. S ním můžete zadat příkaz přímo nebo určit soubor (skript), který obsahuje posloupnost příkazů, které mají být provedeny. Mušle jsou uspořádány v hierarchii a každý shell může vytvořit nový shell. Nový shell je považován za podřízený proces – a subshell—Z rodičovské skořápky, která ji vytváří. Ve výchozím nastavení je subshell závislý na svém nadřazeném zařízení v tom smyslu, že pokud je nadřazený proces ukončen, subshell také končí. Jakýkoli výstup je předán z subshellu do nadřazeného shellu.
Jak vytvořit subshell
Ve skriptu prostředí Bash vytvořte subshell pomocí notace v závorkách: #! / Bin / bash
# subshell-example.sh s nekonečnou smyčkou
(
zatímco [ 1 ]
dělat
echo „Subshell running …“
Hotovo
)
class = „ql-syntax“> V příkladu je smyčka while uzavřena v závorkách, což způsobí její provedení v subshellu prostředí, ve kterém je spuštěn soubor skriptu.
Spuštění subshell na pozadí
Pokud nezadáte, že subshell má být spuštěn na pozadí, nadřazený shell čeká na dokončení subshell, než bude pokračovat se zbytkem skriptu. Chcete-li však paralelně spouštět subshells, spusťte je na pozadí, což je dosaženo znakem ampersand za výrazem subshell, jak je znázorněno zde: #! / Bin / bash
pro ip v {1..254}; dělat
hostitel = 192.168.1. $ ip
(ping -c 1 $ hostitel> / dev / null
-li [ „$?“ = 0 ]
pak
echo $ host
fi) &
Hotovo
Spouštění více dílčích skořápek paralelně
Pokud vytvoříte více podsložek jako procesy na pozadí, můžete úlohy spouštět paralelně. Operační systém obvykle používá pro každý proces a podproces různé procesory nebo jádra, za předpokladu, že existuje alespoň tolik procesorů nebo jader, kolik je procesů. Jinak jsou úkoly přiřazeny stejným procesorům nebo jádrům. V takovém případě procesor nebo jádro nepřetržitě přepíná mezi přiřazenými úkoly, dokud nejsou úkoly dokončeny. Pomocí příkazu wait řekněte nadřazenému procesu, aby počkal na dokončení podprocesů, než bude pokračovat se zbytkem skriptu:
Používá pro dílčí skořápky
Subshells jsou užitečné, když je třeba provést příkazy v konkrétním prostředí nebo adresáři. Pokud je každý příkaz spuštěn v jiném subshellu, nehrozí riziko, že dojde k záměně nastavení proměnných. Po dokončení není nutné obnovit nastavení a aktuální adresář, protože prostředí nadřazeného procesu není ovlivněno žádným z jeho podprocesů. Subshells pracovat s definicemi funkcí, spustitelné mnohokrát s různými parametry.