sh test.sh
sh是經過建立子進程(subshell)去執行腳本,父進程沒法使用子進程中的變量,而子進程對環境變量的修改也不會影響到父進程。父進程中的局部變量子進程也沒法使用,子進程會繼承父進程的環境變量;html
腳本不須要執行權限shell
exec + command ./test.sh exec
使用exec執行腳本,被執行的腳本會繼承當前shell的環境變量,exec至關於建立了新進程,它會將主進程的進程資源佔用,使用主進程的pid,而exec語句執行完以後,後續的語句再也不執行;
腳本須要執行權限bash
source test.sh
使用source或者「.」來調用外部腳本,不會產生新的進程,繼承當前shell環境變量,並且被調用的腳本運行結束後,它擁有的環境變量和聲明變量會被當前shell保留,相似將調用腳本的內容複製過來直接執行。執行完畢後原主shell繼續運行。app
腳本不須要執行權限.net
./test fork
使用fork執行腳本的時候會建立一個子進程去執行該腳本,子進程會繼承父進程的環境變量和聲明變量。當子進程執行完畢後會返回父進程,可是父進程的環境變量不會因子進程的改變而改變。code
腳本須要執行權限htm
./test.sh
建立一個子進程去執行腳本blog
腳本須要執行權限繼承
參考連接:進程
https://blog.csdn.net/w616589292/article/details/50854273