2009-12-10 5 views

Antwort

17

Wie klausbyskov sagt, erfordert die erste Form, dass die Datei ihr ausführbares Erlaubnisbit gesetzt hat.

Aber was noch wichtiger ist, das erste Formular führt das Skript in einem separaten Prozess (getrennt von, unabhängig von und nicht in der Lage, Änderungen in der Shell, die es gestartet hat) zu machen. Das zweite Formular bewirkt, dass die ursprüngliche Shell die Befehle direkt aus der Datei ausführt (als ob Sie sie in die Shell eingegeben hätten, oder als wären sie in dem Skript enthalten, das das 'Sourcing' ausführt).

Ein Skript, das FOO=bar; export FOO enthält, wird keine exportierte Umgebungsvariable FOO in der Shell erstellen, die die erste Variante ausführt, aber es wird eine solche Variable in einer Shell erstellen, die die zweite Variante ausführt.

Die zweite Form (‚Sourcing‘) ist ein wenig wie ein #include in C.

4

Die erste erfordert, dass die Datei das + x Flag gesetzt hat. Die zweite nutzt die. Befehl aka "Quelle", beschrieben here.

+3

Obwohl die wahr ist, desto wichtiger Unterschied besteht darin, dass „source“ liest und ausführt, um die Datei in der aktuellen Shell-Instanz. Das Ausführen des Skripts startet eine neue Instanz der Shell (wie in der Shebang-Zeile angegeben), in der das Skript ausgeführt wird. –

+0

@Dan, ja, das ist richtig, und wird auch in dem Link, den ich gepostet habe erklärt. –

+2

Das ist die '-x' * Erlaubnis * Flagge, nicht die Bash-x * Option * nur um klar zu sein. –

Verwandte Themen