首先,我們來(lái)看一一個(gè)程序test.sh
#!/bin/sh #this is a test. cd /tmp echo "hello,this is a test"
執(zhí)行程序的方法:
1、使文件具有可執(zhí)行權(quán)限,直接運(yùn)行文件。
chmod命令用來(lái)修改文件的權(quán)限。
+x是使文件擁有可執(zhí)行的權(quán)限。就如上面我們運(yùn)行程序一樣。
(推薦教程:linux教程)
2、直接調(diào)用命令解釋器執(zhí)行程序。
由于我們的解釋器是/bin/sh,所以,用sh命令解釋器來(lái)執(zhí)行程序。
3、使用source執(zhí)行文件。
程序執(zhí)行差異說(shuō)明:
在我們運(yùn)行shell程序的三種方法中,前兩種方法的執(zhí)行過(guò)程如下:
(1)父進(jìn)程接收到命令,然后發(fā)現(xiàn)不是內(nèi)建命令,于是創(chuàng)建了一個(gè)和自己一樣的shell進(jìn)程,來(lái)執(zhí)行這個(gè)外部命令
(2)這個(gè)shell子進(jìn)程用/bin/sh取代自己,sh進(jìn)程設(shè)置自己的運(yùn)行環(huán)境變量,其中包括了$PWD變量。
(3)sh進(jìn)程依次執(zhí)行內(nèi)建命令cd和echo。在此過(guò)程中,sh進(jìn)程(子進(jìn)程)的環(huán)境變量被cd命令改變。
(4)子進(jìn)程執(zhí)行完畢,就消亡了,一直在等待的父進(jìn)程醒來(lái),繼續(xù)接受命令。
所以我們明白了前兩種方法執(zhí)行結(jié)果跟我們預(yù)期不一樣的原因,父進(jìn)程的當(dāng)前目錄(環(huán)境變量)無(wú)法被子進(jìn)程改變。
但是,使用source執(zhí)行是shell腳本時(shí)不會(huì)創(chuàng)建子進(jìn)程,而是在父進(jìn)程中直接執(zhí)行。
相關(guān)視頻教程推薦:linux視頻教程