2012-05-30 8 views
65

Gibt es eine Möglichkeit, ein anderes Shell-Skript in ein Shell-Skript aufzunehmen, um auf dessen Funktionen zugreifen zu können?Wie man eine Datei in ein Bash-Shell-Skript einfügt

Wie in PHP können Sie die include Direktive mit anderen PHP-Dateien verwenden, um die Funktionen auszuführen, die darin enthalten sind, indem Sie einfach den Funktionsnamen aufrufen.

+0

möglich Duplikat [Bash: Wie _best_ andere Skripte schließen] (http://stackoverflow.com/questions/192292/bash-how-best-to-include-other -Skripte) – Troubadour

+0

@Troubadour danke für die Referenz. Obwohl sich der Post auf den 'source'-Befehl bezieht, stellt sich die Frage an sich, wie man den Speicherort einer' source'-Datei bestimmen kann. – Mechaflash

+0

Ja, aber es ist mehr als ausreichend für Ihre Bedürfnisse. Hätten Sie nach "bash" und "include" gesucht (zwei Wörter, die im Titel Ihrer eigenen Frage stehen), dann hätten Sie dies am Anfang der Ergebnisse gesehen und wären nicht nötig gewesen, um solch eine grundlegende Frage zu stellen. – Troubadour

Antwort

128

einfach in Ihrem Skript setzen:

source FILE 

Oder

. FILE 

es die gleiche Sache.

$ LANG=C help source 
source: source filename [arguments] 
Execute commands from a file in the current shell. 

Read and execute commands from FILENAME in the current shell. The 
entries in $PATH are used to find the directory containing FILENAME. 
If any ARGUMENTS are supplied, they become the positional parameters 
when FILENAME is executed. 

Exit Status: 
Returns the status of the last command executed in FILENAME; fails if 
FILENAME cannot be read. 
+12

Beachten Sie, dass. ist POSIX-konform, wobei die Quelle nicht –

+0

ist. Aber hier ist die Quelle nicht genau das Gleiche wie in der 'C'-Sprache. Hier führt Source das untergeordnete Skript in das Hauptscript aus. Was ist, wenn ich nur eine bestimmte Funktion aus dem Kindskript aufrufen möchte? –

+6

Nicht verwechseln '. script.sh' mit './script.sh'.Ich habe Stunden verloren zu versuchen herauszufinden, was los ist –

25

Ja, source oder die Kurzform benutzen, die nur . ist:

. other_script.sh 
+0

Beachten Sie die '.' Version funktioniert auf' sh' sowie Bash. Die "Quelle" funktioniert nur in Bash. –

11

Above Antworten ist richtig, aber wenn das Skript in einen anderen Ordner ausführen, wird es ein Problem sein.

Zum Beispiel der a.sh und b.sh sind in demselben Ordner, a umfassen b mit . ./b.sh aufzunehmen.

Wenn Skript aus dem Ordner ausgeführt wird, z. B. mit xx/xx/xx/a.sh, wird Datei b.sh nicht gefunden: ./b.sh: No such file or directory.

Ich benutze

. $(dirname "$0")/b.sh 
Verwandte Themen