Was ist der Unterschied zwischen der Verwendung von `sh` und `Quelle`?
Was ist der Unterschied zwischen sh
und source
?
source: source filename [arguments]
Read and execute commands from FILENAME and return. The pathnames
in $PATH are used to find the directory containing FILENAME. If any
ARGUMENTS are supplied, they become the positional parameters when
FILENAME is executed.
Und für man sh
:
NAME
bash - GNU Bourne-Again SHell
SYNOPSIS
bash [options] [file]
COPYRIGHT
Bash is Copyright (C) 1989-2004 by the Free Software Foundation, Inc.
DESCRIPTION
Bash is an sh-compatible command language interpreter that executes commands read from the standard input or from a file. Bash also incorporates
useful features from the Korn and C shells (ksh and csh).
Bash is intended to be a conformant implementation of the IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim Aufruf
source
(oder dessen alias.
), Sie einfügen das Skript in der aktuellen bash-Prozess. So konnte man Lesen, Variablen, die durch das Skript.Beim Aufruf
sh
initiieren Sie eine Gabel (sub-Prozess) läuft eine neue Sitzung von/bin/sh
, das ist normalerweise ein symbolischer link aufbash
. In diesem Fall, Umgebungsvariablen setzen, indem Sie das sub-script gelöscht werden, wenn das teilscript abgeschlossen ist.Vorsicht:
sh
könnte ein symlink auf anderen shell.Eine kleine Probe
Zum Beispiel, wenn Sie ändern möchten aktuellen Arbeitsverzeichnis durch eine spezifische Art und Weise, die Sie nicht tun konnte,
Diese nicht tun, was Sie erwarten:
weil aktuellen arbeiten dir ist Teil der Umwelt und der
myCd2Doc.sh
laufen würde in einer subshell.Aber:
(Schrieb ich eine kleine Probe von
mycd
Funktion.)Ausführungsebene
$SHLVL
Wenig Rekursion
Und ein letzten - test:
... Können Sie feststellen, eine verschiedenen Verhalten zwischen den beiden syntax. 😉
Der Hauptunterschied ist, dass Sie ausgeführt werden, in einem anderen Prozess.
Also, wenn Sie
source
eine Dateifoo
die nichtcd
, die sourcing-shell (z.B. interaktive shell im terminal) betroffen ist (und das aktuelle Verzeichnis ändern)Wenn Sie ausführen
sh foo
diecd
berührt nicht die sourcing-shell, nur die frisch erstelltensh
Prozess läuftfoo
Lesen Sie die Advanced Bash-Scripting Guide.
, Der Unterschied ist nicht spezifisch für Linux; jeder Posix-Implementierung würde.
Wie andere erwähnt haben, wenn Sie Sie ausführen
sh test.sh
alle änderungen, dietest.sh
macht, um Ihre shell-Umgebung wird nicht beibehalten, nachdem der Prozess beendet wurde.Jedoch auch beachten, dass jedes element Ihrer Umgebung, die nicht exportiert werden (z.B. Variablen, Aliase und shell-Funktionen) nicht verfügbar sein, um den code in
test.sh
wenn es ausgeführt wird als Teilprozess (d.h. mitsh test.sh
).Beispiel:
Beispiel 2:
Wenn Sie ein Programm ausführen, die mit dem sh-Befehl:
und wenn Sie Befehl source :
sh
(z.B.sh test.sh
). Sie nur brauchen Sie, wenn Sie möchten, um es aufzurufen (z.B../test.sh
).