(execute commands and open, close or copy file descriptors)
Das in die POSIX-Shell sh eingebaute Kommando exec hat zwei Funktionen:
exec überlagert die aktuelle Shell durch ein anderes Programm (Format 1). Die aktuelle Shell ist beendet, wenn dieses Programm gestartet wird. Es entsteht kein neuer Prozess; das erkennen Sie daran, dass sich die Prozessnummer nicht ändert (siehe Beispiel 2).
Wenn Sie exec im Dialog eingeben, ist nach der Ausführung des angegebenen Programms die übergeordnete Shell aktiv bzw. Ihre Sitzung beendet. Steht exec in einer Shell-Prozedur, so wird diese Prozedur beendet. Kommandos, die in der Prozedur nach dem Aufruf von exec stehen, werden nie ausgeführt.
exec lenkt die Standard-Eingabe bzw. die Standard-Ausgabe der Shell um auf eine Datei (Format 2). Nach der Ausführung von exec lesen alle eingegebenen Kommandos aus dieser Datei bzw. schreiben in diese Datei, bis die aktuelle Shell beendet ist.
Syntax
Format 1: |
exec programm[ umlenkung] |
Format 2: |
exec umlenkung |
Die Shell durch ein anderes Programm überlagern
beliebiges Kommando, Programm oder Shell-Prozedur, aber kein eingebautes sh-Kommando. Für die dazugehörige Datei brauchen Sie Ausführrecht. Die aktuelle Shell beendet sich; stattdessen wird programm ausgeführt. Wenn programm ausgeführt ist, meldet sich die übergeordnete Shell zurück oder der Begrüßungsbildschirm wird ausgegeben.
weist dem angegebenen Programm, falls es von der Standard-Eingabe liest bzw. auf die Standard-Ausgabe schreibt, eine Datei für die Eingabe bzw. Ausgabe zu. Folgende Angaben für umlenkung sind möglich:
Standard-Eingabe bzw. -Ausgabe der Shell umlenken
weist Kommandos, die von der Standard-Eingabe lesen bzw. auf die Standard-Ausgabe schreiben, eine Datei für die Eingabe bzw. Ausgabe zu. Diese Umlenkung gilt für alle Kommandos, die die aktuelle Shell nach exec ausführt. Folgende Angaben für umlenkung sind möglich:
|
Internationale Umgebung
Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos exec: LANG Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden. LC_ALL Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen. LC_CTYPE Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten und Eingabedateien) sowie die Einteilung der Zeichen in Groß- und Kleinbuchstaben und deren Übereinstimmung. LC_MESSAGES Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden. NLSPATH Legt den Pfad der Meldungsdateien für LC_MESSAGES fest. |
Beispiel 1
Was passiert bei folgender Eingabe:
Das Kommando exec beendet zuerst die aktuelle Shell und führt dann das Kommando date aus. Am Bildschirm wird das aktuelle Datum mit Uhrzeit ausgegeben. Wenn Sie das Kommando in Ihrer POSIX-Shell eingegeben haben, wird anschließend der BS2000-Prompt ausgegeben. Um wieder mit der POSIX-Shell arbeiten zu können, müssen Sie erneut das Kommando START-POSIX-SHELL eingeben. Wenn Sie das Kommando in einer Subshell eingegeben haben, meldet sich die übergeordnete Shell zurück. |
Beispiel 2
Wenn Sie die aktuelle Shell durch ein anderes Programm überlagern, ändert sich die Die Datei proz1 hat folgenden Inhalt: echo proz1 hat Prozessnummer: $$ sh proz2 Die Datei proz2 hat folgenden Inhalt: echo proz2 hat Prozessnummer: $$ exec proz3 Die Datei proz3 - sie muss ausführbar sein - hat folgenden Inhalt: echo proz3 hat Prozessnummer: $$ Die Shell-Prozedur proz1 wird gestartet:
Weil proz3 von proz2 mit exec aufgerufen wird, laufen beide Shell-Prozeduren unter derselben Prozessnummer. Genauer: Die Shell, die die Shell-Prozedur proz2 ausführt, wird überlagert von der Shell, die proz3 ausführt. |
Beispiel 3
Mit dem Kommando exec wird in der Shell-Prozedur exctest die Standard-Eingabe für die nachfolgenden Kommandos umgelenkt auf die Datei /etc/group. Die Datei exctest hat folgenden Inhalt: : Aufruf mit sh exctest exec </etc/group read zeile echo $zeile echo cat Die Shell-Prozedur exctest wird gestartet:
Das eingebaute sh-Kommando read weist der Variablen zeile die erste Zeile der Datei /etc/group zu. Das Kommando echo $zeile gibt den Inhalt dieser Variablen aus. Das Kommando cat liest seine Eingabe ebenfalls aus der Datei /etc/group. Da der Lesezeigerjetzt auf der zweiten Zeile dieser Datei steht, gibt cat den Inhalt erst ab Zeile zwei aus. Anschließend steht der Lesezeiger auf Dateiende. Weitere Kommandos nach dem Aufruf von cat würden deshalb als Eingabe die leere Zeichenkette erhalten. |
Siehe auch
exec() [4] |