Eine andere Möglichkeit besteht darin, den Interpreter aufzurufen und den Pfad zum Skript zu übergeben:
/bin/sh /path/to/script
Der Punkt und die Quelle sind gleichwertig. (BEARBEITEN: Nein, sie sind nicht: Wie KeithB in einem Kommentar zu einer anderen Antwort ausführt, funktioniert "." Nur in bash-bezogenen Shells, wobei "source" sowohl in bash- als auch in csh-bezogenen Shells funktioniert.) Das Skript wird in ausgeführt -place (als ob Sie das Skript genau dort kopiert und eingefügt hätten). Dies bedeutet, dass alle Funktionen und nicht lokalen Variablen im Skript verbleiben. Es bedeutet auch, dass Sie immer noch da sind, wenn das Skript eine CD in einem Verzeichnis erstellt.
Die anderen Methoden zum Ausführen eines Skripts führen es in einer eigenen Subshell aus. Variablen im Skript sind nach Abschluss des Vorgangs noch nicht aktiv. Wenn das Skript die Verzeichnisse geändert hat, hat dies keine Auswirkungen auf die aufrufende Umgebung.
/ path / to / script und / bin / sh script unterscheiden sich geringfügig. Typischerweise hat ein Skript am Anfang einen "shebang", der so aussieht:
#! /bin/bash
Dies ist der Pfad zum Skriptinterpreter. Wenn ein anderer Interpreter angegeben wird als bei der Ausführung, verhält er sich möglicherweise anders (oder funktioniert überhaupt nicht).
Beispielsweise beginnen Perl-Skripte und Ruby-Skripte mit (jeweils):
#! /bin/perl
und
#! /bin/ruby
Wenn Sie eines dieser Skripte ausführen /bin/sh script
, funktionieren sie überhaupt nicht.
Ubuntu verwendet eigentlich keine Bash-Shell, sondern eine sehr ähnliche namens dash. Skripte, die Bash erfordern, funktionieren möglicherweise etwas falsch, wenn sie mit dem /bin/sh script
Bash-Interpreter aufgerufen werden, da Sie gerade ein Bash-Skript aufgerufen haben.
Ein weiterer kleiner Unterschied zwischen dem direkten Aufrufen des Skripts und der Übergabe des Skriptpfads an den Interpreter besteht darin, dass das Skript als ausführbar markiert sein muss, um es direkt auszuführen, aber nicht, um den Pfad an den Interpreter zu übergeben.
Eine weitere geringfügige Änderung: Sie können eine der folgenden Möglichkeiten zum Ausführen eines Skripts mit dem Präfix eval versehen
eval sh script
eval script
eval . script
und so weiter. Es ändert eigentlich nichts, aber ich dachte, ich würde es aus Gründen der Gründlichkeit einbeziehen.