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


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

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

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


免責聲明!

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



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