我見過的shell腳本,其中包括一條線,如:當Unix/Linux環境下的文件是`source`-d時會發生什麼?
source someOtherFile
我知道,引起someOtherFile
的內容來執行,但什麼是source
的意義是什麼?
後續問題:任何腳本都可以來源,或只有某些類型的腳本?腳本來源時是否有環境變量以外的副作用(與通常執行它相反)?
我見過的shell腳本,其中包括一條線,如:當Unix/Linux環境下的文件是`source`-d時會發生什麼?
source someOtherFile
我知道,引起someOtherFile
的內容來執行,但什麼是source
的意義是什麼?
後續問題:任何腳本都可以來源,或只有某些類型的腳本?腳本來源時是否有環境變量以外的副作用(與通常執行它相反)?
對腳本運行命令source
可在當前進程的上下文中執行腳本。這意味着腳本設置的環境變量在完成運行後仍然可用。這與正常運行腳本形成對比,在這種情況下,腳本退出後,在新生成的進程中設置的環境變量將會丟失。
您可以獲取任何可運行的shell腳本。最終效果與將腳本中的命令輸入到終端中相同。例如,如果腳本改變了目錄,當它完成運行時,你的當前工作目錄將會改變。
任何腳本都可以來源,或只有某些類型的腳本? 當腳本來源時(而不是正常執行它),除了環境變量之外的任何副作用? 此外,您的答案是簡潔和可以理解的。謝謝! – 2012-02-17 13:14:49
您可以輸入任何shell腳本。副作用是由腳本在您的過程中真正運行的事實創建的。所以如果它改變目錄,你會看到你的密碼改變。而只是執行一個shell腳本通常不會改變你的密碼。 – Interrobang 2012-02-17 18:28:36
怎麼樣是我有一個很長的運行腳本內的文件來源?它會完成嗎?或者是否有默認的超時時間? – 2016-12-14 15:26:25
如果你告訴shell,例如bash,讀取文件並執行文件中的命令,這就是所謂的採購。重點是,當前進程(shell)執行此操作,而不是新的子進程。
在BASH中,您可以使用source
命令或簡單地.
來源文件。
source
是一個Unix命令,用於評估命令之後的文件,作爲在當前上下文中執行的命令列表。您也可以使用.
來獲取文件。
source my-script.sh;
. my-script.sh;
這兩個命令都會產生同樣的效果。
相反,將腳本文件名傳遞到所需的shell將在子shell中運行腳本,而不是當前上下文。
跨網站重複: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