shell中sh, exec, source, fork, ./的區別

shell中sh, exec, source, fork, ./的區別

1,sh

sh test.sh

​ sh是經過建立子進程(subshell)去執行腳本,父進程沒法使用子進程中的變量,而子進程對環境變量的修改也不會影響到父進程。父進程中的局部變量子進程也沒法使用,子進程會繼承父進程的環境變量;html

腳本不須要執行權限shell

2,exec

exec + command
./test.sh exec

​ 使用exec執行腳本,被執行的腳本會繼承當前shell的環境變量,exec至關於建立了新進程,它會將主進程的進程資源佔用,使用主進程的pid,而exec語句執行完以後,後續的語句再也不執行;
腳本須要執行權限bash

3,source

source test.sh

​ 使用source或者「.」來調用外部腳本,不會產生新的進程,繼承當前shell環境變量,並且被調用的腳本運行結束後,它擁有的環境變量和聲明變量會被當前shell保留,相似將調用腳本的內容複製過來直接執行。執行完畢後原主shell繼續運行。app

腳本不須要執行權限.net

4,fork

./test fork

​ 使用fork執行腳本的時候會建立一個子進程去執行該腳本,子進程會繼承父進程的環境變量和聲明變量。當子進程執行完畢後會返回父進程,可是父進程的環境變量不會因子進程的改變而改變。code

腳本須要執行權限htm

5,./

./test.sh

​ 建立一個子進程去執行腳本blog

腳本須要執行權限繼承

參考連接:進程

https://blog.csdn.net/w616589292/article/details/50854273

http://www.cnblogs.com/pcat/p/5467188.html

https://blog.csdn.net/bigdatahappy/article/details/40114787

相關文章
相關標籤/搜索