shell中sh, exec, source, fork, ./的區別
1,sh
sh test.sh
sh是通過創建子進程(subshell)去執行腳本,父進程無法使用子進程中的變量,而子進程對環境變量的修改也不會影響到父進程。父進程中的局部變量子進程也無法使用,子進程會繼承父進程的環境變量;
腳本不需要執行權限
2,exec
exec + command
./test.sh exec
使用exec執行腳本,被執行的腳本會繼承當前shell的環境變量,exec相當於創建了新進程,它會將主進程的進程資源占用,使用主進程的pid,而exec語句執行完之后,后續的語句不再執行;
腳本需要執行權限
3,source
source test.sh
使用source或者“.”來調用外部腳本,不會產生新的進程,繼承當前shell環境變量,而且被調用的腳本運行結束后,它擁有的環境變量和聲明變量會被當前shell保留,類似將調用腳本的內容復制過來直接執行。執行完畢后原主shell繼續運行。
腳本不需要執行權限
4,fork
./test fork
使用fork執行腳本的時候會創建一個子進程去執行該腳本,子進程會繼承父進程的環境變量和聲明變量。當子進程執行完畢后會返回父進程,但是父進程的環境變量不會因子進程的改變而改變。
腳本需要執行權限
5,./
./test.sh
創建一個子進程去執行腳本
腳本需要執行權限
參考鏈接:
https://blog.csdn.net/w616589292/article/details/50854273