linux腳本文件執行的方法之間的區別


sh/bash

sh a.sh

bash a.sh

都是打開一個subshell去讀取、執行a.sh,而a.sh不需要有"執行權限",在subshell里運行的腳本里設置變量,不會影響到父shell的

source

source a.sh

當前shell內去讀取、執行a.sh,而a.sh不需要有"執行權限"

source命令可以簡寫為"."  即 

. a.sh

./

./a.sh

#bash: ./a.sh: 權限不夠

chmod +x a.sh

./a.sh

打開一個subshell去讀取、執行a.sh,但a.sh需要有"執行權限"

可以用chmod +x添加執行權限

fork、source、exec

  • 使用fork方式運行script時, 就是讓shell(parent process)產生一個child process去執行該script,當child process結束后,會返回parent process,但parent process的環境是不會因child process的改變而改變的。
  • 使用source方式運行script時, 就是讓script在當前process內執行, 而不是產生一個child process來執行。由於所有執行結果均於當前process內完成,若script的環境有所改變, 當然也會改變當前process環境了。
  • 使用exec方式運行script時, 它和source一樣,也是讓script在當前process內執行,但是process內的原代碼剩下部分將被終止。同樣,process內的環境隨script改變而改變。

通常如果我們執行時,都是默認為fork的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM