1. 程式人生 > >shell中source和export區別

shell中source和export區別

source命令用法: source FileName
作用:在當前bash環境下讀取並執行FileName中的命令。該命令通常用命令“.”來替代。 

source命令(從 C Shell 而來)是bash shell的內建命令。點命令,就是個點符號,(從Bourne Shell而來)是source的另一名稱。同樣的,當前指令碼中配置的變數也將作為指令碼的環境,source(或點)命令通常用於重新執行剛修改的初始化文件,如 .bash_profile和 .profile 等等。例如,假如在登入後對 .bash_profile 中的 EDITER 和 TERM 變數做了修改,則能夠用source命令重新執行 .bash_profile 中的命令而不用登出並重新登入。

比如您在一個腳本里export TOOL_CHAINS=/root/home ,假如您用./xxx.sh執行該指令碼,執行完畢後,您執行 echo $TOOL_CHAINS ,發現沒有值。因為呼叫./xxx.sh來執行shell是在一個子shell裡執行的,所以執行後,結構並沒有反應到父shell裡,但是 source是在本shell中執行的,所以能夠看到echo結果。

shell程式設計中的命令有時和C語言是一樣的。&&表示與,||表示或。把兩個命令用&&聯接起來,如 make mrproper && make menuconfig ,表示要第一個命令執行成功才能執行第二個命令。對執行順序有要求的命令能保證一旦有錯誤發生,下面的命令不會盲目地繼續執行。

結論:
1、執行指令碼是在一個子shell環境執行的,指令碼執行完後該子shell自動退出。

2、執行指令碼中的系統環境變數(用export定義的變數)才會被複制到子shell中。

3、一個shell中的系統環境變數只對該shell或者它的子shell有效,該shell結束時變數消失(並不能返回到父shell中)。

4、不用export定義的變數只對該shell有效,對子shell也是無效的。 直接執行一個指令碼檔案是在一個子shell中執行的,而source則是在當前shell環境中執行的。source可以讓指令碼影響它們的父shell環境,這和export去影響子shell環境相反。