8.5 Subshells
Zwar war schon häufig die Rede von einer Subshell, aber es wurde nie richtig darauf eingegangen, wie Sie explizit eine Subshell in Ihrem Script starten können. Die Syntax:
(
kommando1
...
kommando_n
)
oder auch als Einzeiler (aber dann bitte die Leerzeichen beachten):
( kommando1 ; ... ; kommando_n )
Eine Subshell erstellen Sie, wenn Sie Kommandos zwischen runden Klammern gruppieren. Hierbei startet das Script einfach eine neue Shell, welche die aktuelle Umgebung mitsamt den Variablen übernimmt, führt die Befehle aus und beendet sich dann bei Ausführung des letzten Kommandos wieder und kehrt zum Script zurück. Als Rückgabewert wird der Exit-Code des zuletzt ausgeführten Kommandos zurückgegeben. Die Variablen, die Sie in einer Subshell verändern oder hinzufügen, haben keine Auswirkungen auf die Variablen des laufenden Scripts. Sobald sich die Subshell also verändert, verlieren die Werte in der Subshell ihre Bedeutung und dem laufenden Script (bzw. der laufenden Shell) steht nach wie vor die Umgebung zur Verfügung, die vor dem Starten der Subshell vorlag. Diese Technik nutzt die Shell u. a. auch mit dem Here-Dokument aus.
Ein einfaches Beispiel:
# Name: subshell
a=1
b=2
c=3
echo "Im Script: a=$a; b=$b; c=$c"
# Eine Subshell starten
(
echo "Subshell : a=$a; b=$b; c=$c"
# Werte verändern
a=3 ; b=6 ; c=9
echo "Subshell : a=$a; b=$b; c=$c"
)
# Nach der Subshell wieder ...
echo "Im Script: a=$a; b=$b; c=$c"
Das Script bei der Ausführung:
you@host > ./subshell
Im Script: a=1; b=2; c=3
Subshell : a=1; b=2; c=3
Subshell : a=3; b=6; c=9
Im Script: a=1; b=2; c=3
Aber Achtung: Häufig wird eine Subshell, die zwischen runden Klammern steht, irrtümlicherweise mit den geschweiften Klammern gleichgestellt. Kommandos, die zwischen geschweiften Klammern stehen, werden als eine Gruppe zusammengefasst, wodurch Funktionen ja eigentlich erst ihren Sinn bekommen. Befehlsgruppen, die in geschweiften Klammern stehen, laufen in derselben Umgebung (also auch Shell) ab, in der auch das Script ausgeführt wird.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.
|