Was macht exec $ SHELL -l?

9

Ich habe diesen Befehl in einigen verschiedenen Shell-Skripten gesehen:

exec $SHELL -l

... normalerweise als Alternative zu:

source ~/.profile

Was genau exec $SHELL -lmacht das?

Andrew
quelle

Antworten:

9

Der Befehl exec ersetzt das aktuelle Prozessabbild - die ausführbare Datei oder das ausführbare Programm - durch ein neues, das als Argument für exec benannt wird. Wenn $ SHELL wie üblich den Namen einer ausführbaren Datei enthält, dreht exec diese Exe anstelle der laufenden Shell.

Dies ist jedoch eine ganz andere Aktion als nur die Verwendung von "source" zum Einlesen einer Befehlsdatei. Der Quellbefehl liest die benannte Datei und führt den Inhalt zeilenweise aus, als würde er in die Befehlszeile der aktuellen Shell eingegeben.

Mike Diehn
quelle
7

Es ruft Ihre shell ( $SHELL) als Login-Shell auf.

Auszug aus der Bash-Manpage

-l       Make bash act as if it had been invoked as a login shell 
         (see INVOCATION below).

Ich empfehle, den Abschnitt INVOCATION der Manpage zu lesen, um weitere Informationen zu erhalten.

TL; DR;

Unter dem Strich teilt es Bash mit, welche Dateien beim Aufrufen als Quelle verwendet werden sollen. Entweder das $HOME/.bash_profile( -l) oder das $HOME/.bashrc( -i).

Verweise

jktravis
quelle
Zahlen Sie
Ah, also kümmert es sich irgendwie um Inkonsistenzen in den Namen der Bash-Profildateien?
Andrew
1
Sie starten eine neue Shell. Wenn Sie also Änderungen an einer Shell-Konfiguration vorgenommen haben, würde das Ausführen des Befehls $ SHELL -l diese Änderungen "anwenden". Das Ausführen von source ~ / .profile würde dies auf ähnliche Weise tun, ohne eine neue Shell zu starten, außer dass alle Variablen oder Funktionen in Ihrer Konfiguration, die nicht überschrieben werden, so bleiben, wie sie ursprünglich waren.
Jktravis