Der exec Befehl ersetzt den aktuellen Shell-Prozess durch den angegebenen Befehl. Normalerweise wird beim Ausführen eines Befehls ein neuer Prozess erzeugt (gegabelt). Der exec Befehl erzeugt keinen neuen Prozess. Stattdessen wird der aktuelle Prozess mit dem neuen Befehl überlagert. Mit anderen Worten, der execBefehl wird anstelle der aktuellen Shell ausgeführt, ohne einen neuen Prozess zu erstellen.
Es gibt drei häufigste Verwendungszwecke des Befehls exec:
1. Austausch des Prozesses
Beispiel 1:
Wenn Sie eine neuebashShell alsöffnen
$ bash
in pstreees sieht aus wie
├─gnome-terminal
├─bash───bash───pstree
Die vorherige bashShell ist noch da und Sie haben eine neue bashShell. Wenn Sie dagegen eine neue Bash-Shell öffnen,
$ exec bash
die pstreeShows
├─gnome-terminal
├─bash───pstree
Hier wird das Alte bashdurch das Neue ersetzt. Es ist besonders nützlich, mehrere Anmeldungen mit einem Befehl zu beenden. Es ist sicherer und beseitigt die Möglichkeit, versehentlich ein offenes Terminal zu verlassen. Siehe Beenden von root und user mit einem Befehl
Beispiel 2: Sie können eine Datei als öffnen
$ exec vi filename.txt
Wenn Sie das Programm beenden, vimüssen Sie das Terminal nicht separat schließen, da die Shell bereits ersetzt wurde. Sobald Sie das vi schließen, wird auch das Terminal geschlossen.
2. Eine Methode zur Umleitung von Dateideskriptoren innerhalb der Shell-Skripte
Der exec Befehl kann auch in Shell-Skripten verwendet werden, die Dateideskriptoren dynamisch öffnen, schließen und kopieren. Dies ermöglicht die Umleitung von STDIN, STDERR, STDOUT und anderen Dateideskriptoren zu verschiedenen Dateien innerhalb des Shell-Skripts anstelle der Befehlsaufrufzeichenfolge. Wenn Sie keinen Befehl oder keine Argumente angeben, können Sie Umleitungssymbole und Dateideskriptoren angeben, um diese Funktionen auszuführen.
Angenommen, Sie haben ein Shell-Skript, für das script.shSie eine Protokolldatei haben möchten. script.logSie können Folgendes verwenden exec:
LOG=/path/to/script.log
exec 1>>$LOG
exec 2>&1
das ist äquivalent zu
./script &>> /path/to/script.log
./script >> /path/to/script.log 2>&1
3. Erstellen von Phasen des Prozesses mit dem Befehl exec
Sie können auch den Befehl exec verwenden, um eine Reihe von Shell-Skripten zu erstellen, die sich nacheinander wie Phasen des Prozesses ausführen. Anstatt jedes Mal neue Prozesse zu erzeugen, wenn Sie das Steuerelement auf das nächste Skript übertragen müssen, führen Sie den Befehl exec aus.
In diesem Fall sollte die letzte Anweisung jeder Stufe ein execBefehl sein, der die nächste Stufe aufruft.
Weitere Informationen finden Sie unter Verwendung des execBefehls in Shell-Skripten .
Hinweis: Ein Teil der obigen Ausführungen stammt daraus.