-
Ich habe mich gefragt, ob die folgenden zwei Möglichkeiten zum Ausführen eines Bash-Skripts
gleichwertig sind?. ./myScript.sh source myScript.sh
- Führen sie beide den Inhalt des Skripts aus, anstatt das Skript auszuführen, d. h. erstellen sie keine Subshell zum Ausführen des Skripts?
Akzeptierte Antwort:
-
Sie sind in bash äquivalent, da sie genau dasselbe tun. Andererseits
source
ist 5 Zeichen länger und ist nicht auf reine POSIX-Shells oder Bourne portierbar, wohingegen.
(Punkt) ist, also mache ich mir nie die Mühe,source
zu verwenden . -
Das ist richtig – das Sourcing einer Datei führt die Befehle in der aktuellen Shell aus und wirkt sich auf Ihre aktuelle Shell-Umgebung aus. Sie können immer noch Argumente an die Quelldatei übergeben und Bash wird tatsächlich in
$PATH
suchen für den Dateinamen wie ein normaler Befehl, wenn er keine Schrägstriche enthält.
Hat nichts mit der ursprünglichen Frage von .
zu tun vs source
, aber in Ihrem Beispiel
. ./myScript.sh
ist nicht identisch mit
source myScript.sh
denn während .
und source
sind funktional identisch, myScript.sh
und ./myScript.sh
sind nicht das Gleiche. Seit ./myScript.sh
einen Schrägstrich enthält, wird er als Pfad interpretiert und die Shell verwendet einfach ./myScript.sh
. Allerdings myScript.sh
hat keinen Schrägstrich, also macht die Shell einen $PATH
erstmal danach suchen. Dies ist das von POSIX spezifizierte Standardverhalten für .
. Die meisten Shells verwenden dies standardmäßig, obwohl sie Erweiterungen (wie das Suchen im aktuellen Arbeitsverzeichnis nach der Pfadsuche) oder Optionen hinzufügen können, um das Verhalten von .
zu ändern /source
.