轉(zhuǎn)自:https://blog.csdn.net/LEON1741/article/details/81944879
用法:
source filename # filename必須是可執(zhí)行的腳本文件
或者
. filename # 注意“.”號(hào)后面還有一個(gè)空格
比較:
“source filename”與“sh filename”、“./filename”這三個(gè)命令都可以用于執(zhí)行一個(gè)腳本文件,那么它們之間的區(qū)別又如何呢?
當(dāng)shell腳本具有可執(zhí)行權(quán)限時(shí),用sh filename與./filename是沒有區(qū)別的。./filename是因?yàn)楫?dāng)前目錄沒有在PATH中,所以”.”是用來表示當(dāng)前目錄的。
sh filename會(huì)重新建立一個(gè)子shell,在子shell中執(zhí)行腳本里面的語句,該子shell繼承父shell的環(huán)境變量,但子shell是新建的,其改變的變量不會(huì)被帶回父shell,除非使用export。
source filename讀取腳本里面的語句依次在當(dāng)前shell里面執(zhí)行,沒有建立新的子shell。那么腳本里面所有新建、改變變量的語句都會(huì)保存在當(dāng)前shell里面。
舉例:
新建一個(gè)test.sh腳本,內(nèi)容為:A=1;
修改其可執(zhí)行權(quán)限:chmod +x test.sh;
運(yùn)行sh test.sh后,echo $A,顯示為空,因?yàn)锳=1并未傳回給當(dāng)前shell;
運(yùn)行./test.sh后,也是一樣的效果;
運(yùn)行source test.sh 或者 . test.sh,然后echo $A,則會(huì)顯示1,說明A=1的變量在當(dāng)前shell中;