7.10 Subshells und Kommandogruppen
In der Shell können nicht nur einfach Kommandos aneinandergereiht werden. Es gibt neben den bloßen (bedingten) Aneinanderreihungen von Kommandos nämlich noch zwei weitere Möglichkeiten, dies zu organisieren.
Prozessgruppe
Die erste Möglichkeit ist das Bilden einer Prozessgruppe. Diese umfasst dabei die aneinandergereihten Prozesse. Dies bietet dem Anwender neue Möglichkeiten, etwa die Ausgabeumlenkung für die gesamte Prozessgruppe. Eine Prozessgruppe wird durch zwei geschweifte Klammern begrenzt. Innerhalb der Prozessgruppe können die in Abschnitt besprochenen Bedingungen zur Ausführung (etwa das Semikolon zur unbedingten Ausführung) verwendet werden.
Listing 7.57 Prozessgruppe
$ { ls; uname } | tee log.txt
CVS
Makefile
TODO
ZEITPLAN
anhg_komref.tex
...
Linux
Ohne Prozessgruppe müsste nun die Ausgabe jedes Prozesses explizit umgelenkt werden, aber mit Gruppe benötigen wir nur eine Ausgabeumlenkung, die wir in diesem Fall durch eine Pipe mit tee ersetzt haben.
Subshell
Startet man hingegen durch Verwendung normaler Klammern eine komplette Subshell (und damit einen neuen Prozess mit eigenen Bereichen im Stack) für eine Prozessgruppe, so erhält diese Subshell auch ihre eigenen Variablen.
Wenn Sie also in der Subshell die Werte von Variablen verändern, so ändern sich die Werte nicht in der Parent-Shell.
Listing 7.58 Das unterschiedliche Verhalten mit Shellvariablen
user$ katze=Felix
user$ ( katze=Mauzi; echo $katze )
Mauzi
user$ echo $katze
Felix
user$ { katze=Minka ; echo $katze }
Minka
user$ echo $katze
Minka
[»]Später werden wir uns noch mit der unterschiedlichen Nutzung von lokalen und globalen Variablen in Shellskriptfunktionen beschäftigen.
Prozessgruppen im Hintergrund
Prozessgruppen können problemlos im Hintergrund gestartet werden. Möchten Sie beispielsweise eine länger dauernde Dateisuche im Hintergrund ablaufen lassen, ist dies möglich, indem Sie die Anweisung, den Prozess im Hintergrund zu starten (&), hinter die schließende Prozessgruppenklammer stellen: { find / -name Dateiname ; find / -name DateinameB }&
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.