2012-02-17 45 views
58

我見過的shell腳本,其中包括一條線,如:當Unix/Linux環境下的文件是`source`-d時會發生什麼?

source someOtherFile 

我知道,引起someOtherFile的內容來執行,但什麼是source的意義是什麼?


後續問題:任何腳本都可以來源,或只有某些類型的腳本?腳本來源時是否有環境變量以外的副作用(與通常執行它相反)?

+2

跨網站重複:http://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a-bash-scrip/176788#176788 – lesmana 2014-07-30 10:10:31

回答

67

對腳本運行命令source可在當前進程的上下文中執行腳本。這意味着腳本設置的環境變量在完成運行後仍然可用。這與正常運行腳本形成對比,在這種情況下,腳本退出後,在新生成的進程中設置的環境變量將會丟失。

您可以獲取任何可運行的shell腳本。最終效果與將腳本中的命令輸入到終端中相同。例如,如果腳本改變了目錄,當它完成運行時,你的當前工作目錄將會改變。

+2

任何腳本都可以來源,或只有某些類型的腳本? 當腳本來源時(而不是正常執行它),除了環境變量之外的任何副作用? 此外,您的答案是簡潔和可以理解的。謝謝! – 2012-02-17 13:14:49

+4

您可以輸入任何shell腳本。副作用是由腳本在您的過程中真正運行的事實創建的。所以如果它改變目錄,你會看到你的密碼改變。而只是執行一個shell腳本通常不會改變你的密碼。 – Interrobang 2012-02-17 18:28:36

+0

怎麼樣是我有一個很長的運行腳本內的文件來源?它會完成嗎?或者是否有默認的超時時間? – 2016-12-14 15:26:25

16

如果你告訴shell,例如bash,讀取文件並執行文件中的命令,這就是所謂的採購。重點是,當前進程(shell)執行此操作,而不是新的子進程。

在BASH中,您可以使用source命令或簡單地.來源文件。

2

source是一個Unix命令,用於評估命令之後的文件,作爲在當前上下文中執行的命令列表。您也可以使用.來獲取文件。

source my-script.sh; 
. my-script.sh; 

這兩個命令都會產生同樣的效果。

相反,將腳本文件名傳遞到所需的shell將在子shell中運行腳本,而不是當前上下文。

相關問題