Skip to content

Leer hoe u subshells correct uitvoert met behulp van Bash-scripts

4 de juli de 2021
ai codes coding 97077 5c30234d46e0fb0001323587

EEN schelp is een basisinterface voor het invoeren van opdrachten op een Linux-systeem. Hiermee kunt u rechtstreeks een opdracht invoeren of een bestand (script) specificeren dat een reeks opdrachten bevat die moeten worden uitgevoerd. Shells zijn georganiseerd in een hiërarchie en elke shell kan een nieuwe shell maken. De nieuwe shell wordt beschouwd als een kindproces – a subshell-van de bovenliggende shell die het maakt. Standaard is een subshell afhankelijk van zijn bovenliggende in die zin dat als het bovenliggende proces eindigt, de subshell ook eindigt. Elke uitvoer wordt doorgegeven van de subshell naar de bovenliggende shell.

Een subshell maken

Maak in een Bash-shellscript een subshell met behulp van de haakjesnotatie: #!/bin/bash
# subshell-voorbeeld.sh met eindeloze lus
(
terwijl [ 1 ]
Doen
echo “Subshell wordt uitgevoerd …”
gedaan
)

class=”ql-syntax”> In het voorbeeld staat de while-lus tussen haakjes, waardoor deze wordt uitgevoerd in een subshell van de shell waarin het scriptbestand wordt uitgevoerd.

Een subshell op de achtergrond uitvoeren

Tenzij u opgeeft dat de subshell op de achtergrond moet worden uitgevoerd, wacht de bovenliggende shell tot de subshell is voltooid voordat hij verder gaat met de rest van het script. Als u subshells echter parallel wilt uitvoeren, voert u ze op de achtergrond uit, wat wordt bereikt met het ampersand-teken na de subshell-expressie, zoals hier wordt weergegeven: #!/bin/bash
voor ip in {1..254}; Doen
host=192.168.1.$ip
(ping -c 1 $host > /dev/null
als [ “$?” = 0 ]
dan
echo $host
fi) &
gedaan

Meerdere subshells parallel uitvoeren

Als u meerdere subshells als achtergrondprocessen maakt, kunt u taken parallel uitvoeren. Doorgaans gebruikt het besturingssysteem verschillende processors of cores voor elk proces en subproces, ervan uitgaande dat er minstens zoveel processors of cores zijn als er processen zijn. Anders worden taken toegewezen aan dezelfde processors of cores. In dat geval schakelt de processor of core continu tussen de toegewezen taken totdat de taken zijn voltooid. Gebruik de wait-instructie om het bovenliggende proces te vertellen dat het moet wachten tot de subprocessen zijn voltooid voordat u verder gaat met de rest van het script:

Gebruik voor subshells

Subshells zijn handig wanneer opdrachten moeten worden uitgevoerd in een bepaalde omgeving of map. Als elke opdracht in een andere subshell wordt uitgevoerd, is er geen risico dat variabele instellingen door elkaar worden gehaald. Na voltooiing hoeven de instellingen en de huidige map niet te worden hersteld, omdat de omgeving van het bovenliggende proces niet wordt beïnvloed door een van zijn subprocessen. Subshells werken met functiedefinities, die vaak met verschillende parameters kunnen worden uitgevoerd.