2012-05-30 80 views
65

有沒有辦法在shell腳本中包含另一個shell腳本以便能夠訪問其功能?如何將文件包含在bash shell腳本中

就像在PHP中一樣,您可以將include指令與其他PHP文件一起使用,以便通過調用函數名稱來運行包含的函數。

+0

[Bash的?:如何_best_包括其他腳本]的可能重複(http://stackoverflow.com/questions/192292/bash-how-best-to-include-other -scripts) – Troubadour

+0

@Troubadour感謝您的參考。儘管這篇文章提到了「source」命令,但問題本身就是在詢問如何查明「source」文件的位置。 – Mechaflash

+0

是的,但它足夠滿足您的需求。如果您搜索了「bash」和「include」(兩個詞在您自己的問題標題中),那麼您會在結果的頂部看到這一點,而不需要提出這樣一個基本問題。 – Troubadour

回答

128

簡單地把你的腳本中:

source FILE 

或者

. FILE 

這是同樣的事情。

$ 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

請注意。是符合POSIX的,而源不是 –

+0

但是這裏的源代碼並不完全像我們在'C'語言中做的那樣。這裏源代碼正在執行主腳本中的子腳本。如果我只想從子腳本中調用特定的函數呢? –

+6

請勿混淆。 script.sh'與'。/ script.sh'。我失去了數小時試圖弄清楚發生了什麼 –

25

是,使用source或短期形式只是.

. other_script.sh 
+0

請注意'''版本在'sh'和Bash上都有效。 「源」只在Bash中有效。 –

11

以上的答案是正確的,但如果在其他文件夾中運行腳本,會出現一些問題。

例如,a.shb.sh位於相同的文件夾中, a包括b包含. ./b.sh

將腳本運行出該文件夾時,例如使用xx/xx/xx/a.sh時,將找不到文件b.sh./b.sh: No such file or directory

我用

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