6 Grundlagen aus Anwendersicht
6 Grundlagen aus Anwendersicht
6 Grundlagen aus Anwendersicht
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Subshells und Kommandogruppen 7.10<br />
Wie Ihnen vielleicht aufgefallen ist, wird eine Pipe beim »langen« Listing mit ls<br />
mit einem p gekennzeichnet. Dieses p steht für (Named) Pipe und zeigt Ihnen an,<br />
dass es sich um keine reguläre Datei handelt. Versuchen Sie einmal, sich mit dem<br />
Programm file den Typ der Datei anzeigen zu lassen.<br />
7.10 Subshells und Kommandogruppen<br />
In der Shell können nicht nur einfach Kommandos aneinandergereiht werden. Es<br />
gibt neben den bloßen (bedingten) Aneinanderreihungen von Kommandos nämlich<br />
noch zwei weitere Möglichkeiten, dies zu organisieren.<br />
Die erste Möglichkeit ist das Bilden einer Prozessgruppe. Diese umfasst dabei die<br />
aneinandergereihten Prozesse. Dies bietet dem Anwender neue Möglichkeiten, etwa<br />
die Ausgabeumlenkung für die gesamte Prozessgruppe. Eine Prozessgruppe wird<br />
durch zwei geschweifte Klammern begrenzt. Innerhalb der Prozessgruppe können<br />
die in Abschnitt 7.7.2 besprochenen Bedingungen zur Ausführung (etwa das Semikolon<br />
zur unbedingten Ausführung) verwendet werden.<br />
Prozessgruppe<br />
$ { ls; uname } | tee log.txt<br />
CVS<br />
Makefile<br />
TODO<br />
ZEITPLAN<br />
anhg_komref.tex<br />
...<br />
Linux<br />
Listing 7.59 Prozessgruppe<br />
Ohne Prozessgruppe müsste nun die Ausgabe jedes Prozesses explizit umgelenkt<br />
werden, aber mit Gruppe benötigen wir nur eine Ausgabeumlenkung, die wir in<br />
diesem Fall durch eine Pipe mit tee ersetzt haben.<br />
Startet man hingegen durch Verwendung normaler Klammern eine komplette Subshell<br />
(und damit einen neuen Prozess mit eigenen Bereichen im Stack) für eine<br />
Prozessgruppe, so erhält diese Subshell auch ihre eigenen Variablen.<br />
Subshell<br />
Wenn Sie also in der Subshell die Werte von Variablen verändern, so ändern sich die Werte<br />
nicht in der Parent-Shell.<br />
user$ katze=Felix<br />
user$ ( katze=Mauzi; echo $katze )<br />
Mauzi<br />
241