linux里source、. 、sh、bash、./有什么区别
轉(zhuǎn)載:https://www.cnblogs.com/pcat/p/5467188.html
1.source a.sh?
source可以簡寫為“.”,即. a.sh? 注意中間有空格,在當前shell內(nèi)去讀取、執(zhí)行a.sh,而a.sh不需要有"執(zhí)行權(quán)限"。
2.sh a.sh 和 bash a.sh
都是打開一個subshell(子shell,由父shell產(chǎn)生)去讀取、執(zhí)行a.sh,而a.sh不需要有"執(zhí)行權(quán)限"。通常在subshell里運行的腳本里設置變量,不會影響到父shell的。
3.? ./ a.sh
打開一個subshell去讀取、執(zhí)行a.sh,但a.sh需要有"執(zhí)行權(quán)限"。
4、fork、source、exec
使用fork方式運行script時, 就是讓shell(parent process)產(chǎn)生一個child process去執(zhí)行該script,當child process結(jié)束后,會返回parent process,但parent pro cess的環(huán)境是不會因child process的改變而改變的。
使用source方式運行script時, 就是讓script在當前process內(nèi)執(zhí)行, 而不是產(chǎn)生一個child process來執(zhí)行。由于所有執(zhí)行結(jié)果均于當前process內(nèi)完成,若script的環(huán)境有所改變, 當然也會改變當前process環(huán)境了。
使用exec方式運行script時, 它和source一樣,也是讓script在當前process內(nèi)執(zhí)行,但是process內(nèi)的原代碼剩下部分將被終止。同樣,process內(nèi)的環(huán)境隨script改變而改變。
通常如果我們執(zhí)行時,都是默認為fork的。
總結(jié)
以上是生活随笔為你收集整理的linux里source、. 、sh、bash、./有什么区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剖析数组名、函数名(不是指针常量,更不是
- 下一篇: C库函数与Linux系统函数之间的关系