exec(1) exec(1)
NAME
exec - Die aktuelle Shell überlagern (execute)
SYNTAX
exec programm [umlenkung] Format 1
exec umlenkung Format 2
BESCHREIBUNG
Das in die Shell sh(1) bzw. ksh(1) eingebaute Kommando exec hat zwei
Funktionen:
- exec überlagert die aktuelle Shell durch ein anderes Programm (For-
mat 1). Die aktuelle Shell ist beendet, wenn dieses Programm
gestartet wird. Es entsteht kein neuer Prozeß; das erkennen Sie
daran, daß sich die Prozeßnummer nicht ändert (siehe Beispiel 2).
Wenn Sie exec im Dialog eingeben, ist nach der Ausführung des ange-
gebenen 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 Standardeingabe bzw. die Standardausgabe 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.
In der Korn-Shell ksh existieren zusätzliche Umlenkmöglichkeiten
(siehe ksh(1)].
Format 1: Die Shell durch ein anderes Programm überlagern
exec programm [umlenkung]
programm
Beliebiges Kommando, Programm oder Shell-Prozedur, aber kein ein-
gebautes Shell-Kommando. Für die dazugehörige Datei brauchen Sie
Ausführrecht.
Die aktuelle Shell beendet sich; statt dessen wird programm aus-
geführt. Wenn programm ausgeführt ist, meldet sich die übergeord-
nete Shell zurück oder der Begrüßungsbildschirm wird ausgegeben.
umlenkung
Weist dem angegebenen Programm, falls es von der Standardeingabe
liest bzw. auf die Standardausgabe schreibt, eine Datei für die
Eingabe bzw. Ausgabe zu.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
exec(1) exec(1)
Folgende Angaben für umlenkung sind möglich:
>datei Die Standardausgabe des angegebenen Programms wird auf
datei umgelenkt. In datei enthaltene Daten werden vorher
gelöscht.
>>datei Die Standardausgabe des angegebenen Programms wird auf
datei umgelenkt. In datei enthaltene Daten werden nicht
gelöscht; die Ausgaben des Programms werden an den bis-
herigen Inhalt von datei angehängt.
2>datei Die Standardfehlerausgabe des angegebenen Programms wird
auf datei umgelenkt.
<datei Die Standardeingabe des angegebenen Programms wird auf
datei umgelenkt. Das Programm liest also seine Eingabe
aus dieser Datei.
Format 2: Standardeingabe bzw. -ausgabe der Shell umlenken
exec umlenkung
umlenkung
Weist Kommandos, die von der Standardeingabe lesen bzw. auf die
Standardausgabe schreiben, eine Datei für die Eingabe bzw. Aus-
gabe zu. Diese Umlenkung gilt für alle Kommandos, die die aktu-
elle Shell nach exec ausführt.
Folgende Angaben für umlenkung sind möglich:
>datei Alle Kommandos, die die aktuelle Shell ausführt, schrei-
ben 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 Umlen-
kung nur rückgängig machen:
- mit CTRL-D. Damit beenden Sie die aktuelle Shell.
- mit der Eingabe exec >/dev/tty. Damit lenken Sie die
Standardausgabe wieder auf den Bildschirm um.
Steht exec in einer Shell-Prozedur, so gilt die Umlen-
kung nur für die Kommandos, die in der Prozedur auf den
Aufruf von exec folgen. Wollen Sie die Umlenkung inner-
halb 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 Standardausgabe
der nachfolgenden Kommandos wieder auf den Bildschirm
um.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
exec(1) exec(1)
>>datei Alle Kommandos, die die aktuelle Shell ausführt, schrei-
ben 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>datei Die Standardfehlerausgabe 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 Ein-
gabe.
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, muß das der
Name einer Shell-Prozedur sein. 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 Umgebungsvariable LCMESSAGES bestimmt die Sprache der Meldungs-
texte. Wenn LCMESSAGES nicht oder als leere Zeichenkette definiert
ist, wird der Wert von LANG als Standardwert herangezogen. Ist auch
LANG nicht oder als leere Zeichenkette definiert, verhält sich das
System so, als wäre es nicht internationalisiert.
Die Umgebungsvariable LCALL bestimmt die gesamte internationale Umge-
bung. LCALL hat Vorrang vor allen anderen Umgebungsvariablen im
Bereich der Internationalisierung.
BEISPIELE
Beispiel 1
Was passiert bei folgender Eingabe:
$ exec date
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
exec(1) exec(1)
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 Login-Shell eingegeben haben, wird
anschließend der Begrüßungsbildschirm ausgegeben. Sie müssen sich neu
am System anmelden.
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 Prozeßnummer 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 muß 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 Prozeßnummer. 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
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
exec(1) exec(1)
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
uucp::4:
.
.
.
Das eingebaute Shell-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 Lesezeiger jetzt 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 Zeichen-
kette erhalten.
HINWEISE
Bei der Verwendung von exec können sich Abweichungen im Verhalten
ergeben, je nachdem, welche Shell benutzt wird. Die möglichen Abwei-
chungen sind nicht eigens beschrieben.
SIEHE AUCH
ksh(1), sh(1), exec(2).
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98