Wenn Sie ein Shell-Skript ausführen , erfolgt dies in einer Sub-Shell, sodass die Umgebung der übergeordneten Shell nicht beeinträchtigt werden kann. Sie möchten das Skript wie folgt beschaffen:
. ./setfoo.sh
Dies führt es im Kontext der aktuellen Shell aus, nicht als Sub- Shell.
Von der Bash-Manpage:
. Dateiname [Argumente]
Quelldateiname [Argumente]
Lesen und Ausführen von Befehlen aus dem Dateinamen in der aktuellen Shell-Umgebung und Zurückgeben des Beendigungsstatus des zuletzt aus dem Dateinamen ausgeführten Befehls.
Wenn der Dateiname keinen Schrägstrich enthält, werden Dateinamen in PATH verwendet, um das Verzeichnis zu finden, das den Dateinamen enthält.
Die in PATH gesuchte Datei muss nicht ausführbar sein. Wenn sich bash nicht im POSIX-Modus befindet, wird das aktuelle Verzeichnis durchsucht, wenn in PATH keine Datei gefunden wird.
Wenn die Quellpfadoption für den eingebauten Befehl shopt deaktiviert ist, wird der Pfad nicht durchsucht.
Wenn Argumente angegeben werden, werden diese zu Positionsparametern, wenn der Dateiname ausgeführt wird.
Ansonsten bleiben die Positionsparameter unverändert. Der Rückgabestatus ist der Status des letzten im Skript beendeten Befehls (0, wenn keine Befehle ausgeführt werden) und false, wenn der Dateiname nicht gefunden wird oder nicht gelesen werden kann.