Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

exec - Die aktuelle Shell überlagern

&pagelevel(4)&pagelevel

(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
Format 1: exec programm[ umlenkung]


programm

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.

umlenkung

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:


>dateiDie Standard-Ausgabe des angegebenen Programms wird auf datei umgelenkt. In datei enthaltene Daten werden vorher gelöscht.
>>dateiDie Standard-Ausgabe des angegebenen Programms wird auf datei umgelenkt. In datei enthaltene Daten werden nicht gelöscht; die Ausgaben des Programms werden an den bisherigen Inhalt von datei angehängt.
2>dateiDie Standard-Fehlerausgabe des angegebenen Programms wird auf datei umgelenkt.
<dateiDie Standard-Eingabe des angegebenen Programms wird auf datei umgelenkt. Das Programm liest also seine Eingabe aus dieser Datei.


Standard-Eingabe bzw. -Ausgabe der Shell umlenken
Format 2: exec umlenkung


umlenkung

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:


>datei

Alle Kommandos, die die aktuelle Shell ausführt, schreiben ihre Ausgabe nacheinander in die angegebene Datei. In datei enthaltene Daten werden gelöscht. So werden alle Ausgaben gesammelt.

Wenn Sie exec im Dialog eingeben, können Sie die Umlenkung nur rückgängig machen:

  • terminalabhängig mit CTRL+D oder @@d. Damit beenden Sie die aktuelle Shell.

  • mit der Eingabe exec >/dev/tty. Damit lenken Sie die Standard-Ausgabe wieder auf den Bildschirm um.

Steht exec in einer Shell-Prozedur, so gilt die Umlenkung nur für die Kommandos, die in der Prozedur auf den Aufruf von exec folgen. Wollen Sie die Umlenkung innerhalb der Prozedur rückgängig machen, müssen Sie in der Prozedur an der betreffenden Stelle das Kommando exec >/dev/tty einfügen. Damit lenken Sie die Standard-Ausgabe der nachfolgenden Kommandos wieder auf den Bildschirm um.

>>dateiAlle Kommandos, die die aktuelle Shell ausführt, schreiben ihre Ausgabe nacheinander in die angegebene Datei. In datei enthaltene Daten werden nicht gelöscht; die Ausgaben der Kommandos werden an den bisherigen Inhalt von datei angehängt.
2>dateiDie Standard-Fehlerausgabe wird für alle Kommandos, die die aktuelle Shell ausführt, auf datei umgelenkt.
<datei

Wenn Sie exec im Dialog eingeben, liest die aktuelle Shell die Kommandos, die sie ausführen soll, aus der angegebenen Datei. Nach dem letzten Kommando beendet sich die Shell.

Steht dieses Kommando in einer Shell-Prozedur, so lesen alle Kommandos, die in der Prozedur auf den Aufruf von exec folgen, ihre Eingabe aus der angegebenen Datei. Jeder Lesevorgang verändert die Position des Lesezeigers in dieser Datei. Wenn der Lesezeiger auf Dateiende (EOF) steht, erhalten alle noch folgenden Kommandos keine Eingabe.

Mit dem Kommando exec </dev/tty lenken Sie die Standard-Eingabe für die nachfolgenden Kommandos wieder auf die Tastatur um.

datei
Wenn Sie exec im Dialog eingeben, muss das der Name einer Shell-Prozedursein. Für diese Shell-Prozedur brauchen Sie nur Leserecht.

Wenn exec in einer Shell-Prozedur steht, ist das der Name der Datei, aus der die nachfolgenden Kommandos ihre Eingabe lesen sollen.

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:

$ exec date

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
Prozessnummer nicht. Das soll mit den folgenden Dateien gezeigt werden:

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:

$ sh proz1
proz1 hat Prozessnummer: 2755

proz2 hat Prozessnummer: 2760

proz3 hat Prozessnummer: 2760

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:

$ sh exctest

root::0:root

daemon::1:daemon

sys::2:sys:

bin::3:bin,admin

...

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]