Ich habe mich gefragt, ob die folgenden beiden Methoden zum Ausführen eines Bash-Skripts gleichwertig sind.
. ./myScript.sh source myScript.sh
- Führen beide den Inhalt des Skripts aus, anstatt das Skript auszuführen, dh sie erstellen keine Subshell zum Ausführen des Skripts?
bash
shell
shell-script
Tim
quelle
quelle
man .
,man source
Oder was auch immer ich noch nicht kenne.type .
undhelp .
man $SHELL
,/source
Antworten:
Sie sind insofern äquivalent, als sie genau dasselbe tun. Auf der anderen Seite
source
ist es 5 Zeichen länger und kann nicht auf POSIX-Shells oder Bourne übertragen werden, wohingegen.
(Punkt) verwendet wird, sodass ich mich nie darum kümmeresource
.Das ist richtig. Wenn Sie eine Datei ausgeben, werden die Befehle in der aktuellen Shell ausgeführt, und dies wirkt sich auf Ihre aktuelle Shell-Umgebung aus. Sie können weiterhin Argumente an die Quelldatei übergeben, und Bash sucht tatsächlich nach
$PATH
dem Dateinamen wie bei einem normalen Befehl, wenn er keine Schrägstriche enthält.Nicht im Zusammenhang mit der ursprünglichen Frage von
.
vssource
, aber in Ihrem Beispielist nicht identisch mit
weil while
.
undsource
funktional identisch sindmyScript.sh
und./myScript.sh
nicht gleich sind. Da es./myScript.sh
einen Schrägstrich enthält, wird er als Pfad interpretiert und von der Shell nur verwendet./myScript.sh
. HatmyScript.sh
jedoch keinen Schrägstrich, sodass die Shell zuerst danach sucht$PATH
. Dies ist das POSIX-spezifizierte Standardverhalten für.
. Die meisten Shells verwenden standardmäßig diese Option, obwohl sie möglicherweise Erweiterungen (z. B. die Suche im aktuellen Arbeitsverzeichnis nach der Pfadsuche) oder Optionen zum Ändern des Verhaltens von.
/ hinzufügensource
.quelle
/
ist shellabhängigbash
undzsh
hängt davon ab, ob der POSIX-Modus aktiviert ist oder nicht. Beachten Sie auch, dass sich ksh in vielen Implementierungen.
anders verhält alssource
.Ja, sie sind gleichwertig. Es gibt keinen funktionalen Unterschied.
.
ist nur ein eingebautes Synonym fürsource
.(Edit: Anscheinend gilt das nur für
bash
undzsh
. Einige leichtere Shells haben keinesource
, nur.
wird sie von POSIX spezifiziertksh
, alsodash
müssenash
, etc. nichtsource
. Siehe Antwort von jw013 für Infos.)quelle
$ alias .
Ausgängebash: alias: .: not found
.