Ich lerne exec
Befehl. Ich weiß, dass der exec
Befehl den Prozess ersetzt, der ihn gestartet hat. Es ist also nicht möglich, zu dem Prozess zurückzukehren, der durch einen exec
Befehl ersetzt wird .
Man könnte sagen, dass es das Ziel ist, es unmöglich zu machen, zu dem Prozess zurückzukehren, der ihn gestartet hat.
Aber wozu kann man so etwas wie exec
einen Befehl zur Verfügung haben?
command-line
Mizech
quelle
quelle
exec ssh server-that-does-byobu-on-login.example.com
es sehr erfreulich, dass ^ A ^ D das Terminal komplett herunterfährt. (Allgemeiner gesagt ,exec byobu
(oderexec screen
,exec tmux
).Antworten:
Im Wrapper-Skript
exec
wird hauptsächlich in Wrapper-Skripten verwendet.Wenn Sie die Umgebung für ein Programm ändern möchten, bevor Sie das Hauptprogramm ausführen, schreiben Sie häufig ein Skript und starten am Ende das Hauptprogramm. Es ist jedoch nicht erforderlich, dass das Skript zu diesem Zeitpunkt im Speicher bleibt. Wird
exec
also in diesen Fällen verwendet, damit das Hauptprogramm das Mutter-Skript ersetzen kann.Hier ist ein praktisches Beispiel dafür. Das
mate-terminal.wrapper
Skript wird mit einem Mate-Terminal geliefert. Es beginntmate-terminal
mit einigen zusätzlichen Argumenten, indem die Benutzerumgebungen überprüft werden.Hier ist zu beachten, dass es einen
exec
Aufruf gibt, der dieses Skript im Speicher ersetzt.Hier ist eine ähnliche Frage, die auf der Unix & Linux StackExchange-Site beantwortet wurde - /unix//q/270929/19288
Umleiten von Dateideskriptoren
Eine weitere häufige Verwendung
exec
ist das Umleiten von Dateideskriptoren.stdin
,stdout
,stderr
Mit exec kann umgeleitet , um Dateien werden.Umleiten
stdout
-exec 1>file
bewirkt, dass die Standardausgabe eine Datei ist, diefile
für das Ende der aktuellen Shell-Sitzung benannt ist. Alles, was auf dem Display ausgegeben werden soll, befindet sich in der Datei.Umleiten
stdin
- Es kann auch verwendet werden , die die Umleitungstdin
in eine Datei. Wenn Sie beispielsweise eine Skriptdatei ausführen möchtenscript.sh
, können Sie diese einfach mitstdin
in die Datei umleitenexec 0<script.sh
.quelle
exec
, nämlich die Verwendung bei der Umleitung von Dateideskriptoren.Der
exec
Befehl ersetzt den aktuellen Shell-Prozess durch den angegebenen Befehl. Normalerweise wird beim Ausführen eines Befehls ein neuer Prozess erzeugt (gegabelt). Derexec
Befehl erzeugt keinen neuen Prozess. Stattdessen wird der aktuelle Prozess mit dem neuen Befehl überlagert. Mit anderen Worten, derexec
Befehl 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 neue
bash
Shell alsöffnenin
pstree
es sieht aus wieDie vorherige
bash
Shell ist noch da und Sie haben eine neuebash
Shell. Wenn Sie dagegen eine neue Bash-Shell öffnen,die
pstree
ShowsHier wird das Alte
bash
durch 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 BefehlBeispiel 2: Sie können eine Datei als öffnen
Wenn Sie das Programm beenden,
vi
mü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.sh
Sie eine Protokolldatei haben möchten.script.log
Sie können Folgendes verwendenexec
:das ist äquivalent zu
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
exec
Befehl sein, der die nächste Stufe aufruft.Weitere Informationen finden Sie unter Verwendung des
exec
Befehls in Shell-Skripten .Hinweis: Ein Teil der obigen Ausführungen stammt daraus.
quelle
Soweit ich weiß, wird es auch verwendet, um Dateideskriptoren (zum Beispiel STDOUT, STDERR, STDIN) eines Bash-Skripts umzuleiten.
So können Sie beispielsweise mithilfe der STDIN-Umleitung aus einer Datei anstelle der Tastatur lesen und mithilfe der STDOUT-Umleitung (oder je nach Programm STDERR) in eine Datei anstelle des Terminals schreiben.
quelle