Shell腳本的執行方式:
註明:wd表明「腳本保存的目錄」shell
1.fork
語法:/wd/shell.sh
fork是最普通的, 就是直接在腳本里面用/wd/shell.sh來調用shell.sh這個腳本.運行的時候開一個子shell執行調用的腳本,子shell執行的時候, 父shell還在。子shell執行完畢後返回父shell。子shell從父shell繼承環境變量.可是子shell中的環境變量不會帶回父 shellbash
2.exec
語法: exec /wd/shell.sh
exec與fork不一樣,不須要新開一個sub-shell來執行被調用的腳本. 被調用的腳本與父腳本在同一個shell內執行。可是使用exec調用一個新腳本之後, 父腳本中exec行以後的內容就不會再執行了。這是exec和source的區別。函數
3.source
語法:source /wd/shell.sh
與fork的區別是不新開一個子shell來執行被調用的腳本,而是在同一個shell中執行。因此被調用的腳本中聲明的變量和環境變量, 均可以在主腳本中獲得和使用。.net
4.()
語法:( 語句;語句;語句;…… )
圓括號中命令列表的命令將會運行在一個子shell中。blog
好比:
$ (cd ..;ls -l)
cd ..命令改變的是子Shell的PWD,而不會影響到交互式Shell。
然而命令
$ cd ..;ls -l
則有不一樣的效果,cd ..命令是直接在交互式Shell下執行的,改變交互式Shell的PWD,然
而這種方式至關於這樣執行Shell腳本:
$ source ./script.sh
或者
$ . ./script.sh繼承
source或者.命令是Shell的內建命令,這種方式也不會建立子Shell,而是直接在交互式Shell下逐行執行腳本中的命令。ip
source命令、.命令
語法: . filename [arguments]
source filename [arguments]
做用:
當在命令 行中調用的時候, 這個命令將會執行一個腳本. 當在腳本中調用的時候, source file-name 將會加載file-name文件, 或者 . (點命令)一個文件將會在腳本中引入代碼, 並將這些代碼附加到腳本中(與C語言中的#include指令效果相同). 最終的結果就像是在使用"source"的行上插入了相應文件的內容.
在多個腳本須要引用相同的數據, 或者須要使用函數庫的狀況下, 這個命令很是有用.get
5.{}
{語句;語句;……}不會啓動子SHELL。class