source命令用法:?source FileName?
作用:在當(dāng)前bash環(huán)境下讀取并執(zhí)行FileName中的命令。該命令通常用命令“.”來替代。
source命令(從 C Shell 而來)是bash shell的內(nèi)置命令。點(diǎn)命令,就是個(gè)點(diǎn)符號(hào),(從Bourne Shell而來)是source的另一名稱。同樣的,當(dāng)前腳本中配置的變量也將作為腳本的環(huán)境,source(或點(diǎn))命令通常用于重新執(zhí)行剛修改的初始化文檔,如 .bash_profile和 .profile 等等。例如,假如在登錄后對(duì) .bash_profile 中的 EDITER 和 TERM 變量做了修改,則能夠用source命令重新執(zhí)行 .bash_profile 中的命令而不用注銷并重新登錄。?
比如您在一個(gè)腳本里export TOOL_CHAINS=/root/home ,假如您用./xxx.sh執(zhí)行該腳本,執(zhí)行完畢后,您運(yùn)行 echo $TOOL_CHAINS ,發(fā)現(xiàn)沒有值。因?yàn)檎{(diào)用./xxx.sh來執(zhí)行shell是在一個(gè)子shell里運(yùn)行的,所以執(zhí)行后,結(jié)構(gòu)并沒有反應(yīng)到父shell里,但是 source是在本shell中執(zhí)行的,所以能夠看到echo結(jié)果。
shell編程中的命令有時(shí)和C語言是一樣的。&&表示與,||表示或。把兩個(gè)命令用&&聯(lián)接起來,如 make mrproper && make menuconfig ,表示要第一個(gè)命令執(zhí)行成功才能執(zhí)行第二個(gè)命令。對(duì)執(zhí)行順序有要求的命令能保證一旦有錯(cuò)誤發(fā)生,下面的命令不會(huì)盲目地繼續(xù)執(zhí)行。
結(jié)論:
1、執(zhí)行腳本是在一個(gè)子shell環(huán)境運(yùn)行的,腳本執(zhí)行完后該子shell自動(dòng)退出。
2、執(zhí)行腳本中的系統(tǒng)環(huán)境變量(用export定義的變量)才會(huì)被復(fù)制到子shell中。
3、一個(gè)shell中的系統(tǒng)環(huán)境變量只對(duì)該shell或者它的子shell有效,該shell結(jié)束時(shí)變量消失(并不能返回到父shell中)。
4、不用export定義的變量只對(duì)該shell有效,對(duì)子shell也是無效的。?直接執(zhí)行一個(gè)腳本文件是在一個(gè)子shell中運(yùn)行的,而source則是在當(dāng)前shell環(huán)境中運(yùn)行的。source可以讓腳本影響它們的父shell環(huán)境,這和export去影響子shell環(huán)境相反。