執行命令的方式
執行Shell腳本的方式通常有以下四種
- 方式一:
bash ./test.sh
- 方式二:
./test.sh
- 方式三:
source ./test.sh
- 方式四:
. ./test.sh
執行方式的區別
方式一bash
方式執行腳本的話,會在當前的終端下面產生一個bash子進程來運行腳本,所以對當前的環境是沒有影響的。
[root@lincoding usr]# bash ./test.sh
方式二./test.sh
的方式運行,則腳本第一行聲明是哪個Shell解釋器就會產生哪個Shell解釋器的子進程來運行腳本,如果聲明的Shell解釋器是bash,則與方式一類似。
[root@lincoding usr]# ./test.sh
方式三和方式四執行的時候,和上面的方式一和方式略有點不同。
因爲他執行的時候是通過當前的終端來執行Shell腳本的,不會產生子進程,所以會當前的環境是有影響的。
[root@lincoding usr]# source ./test.sh
[root@lincoding usr]# . ./test.sh
執行方式的影響對比
上述也提及到了方式一和方式二,由於是會產子進程來執行Shell腳本,所以對當前的環境是沒有影響的;而方式二和方式三,是在當前的終端執行Shell腳本,所以是會對當前的環境是有影響的。
舉個栗子,編寫一個切換目錄的test.sh腳本,內容如下
#!/bin/bash
# 切換到tmp目錄
cd /tmp
# 打印當前目
pwd
那麼使用方式一執行test.sh腳本,其結果如下:
[root@lincoding /]# bash test.sh
/tmp
[root@lincoding /]# pwd
/
可以發現,使用方式一去執行腳本,不需要給予執行權限。
方式二執行test.sh腳本,其結果如下:
[root@lincoding /]# chmod u+x test.sh
[root@lincoding /]# ls -l test.sh
-rwxr--r--. 1 root root 64 Sep 26 18:34 test.sh
[root@lincoding /]# ./test.sh
/tmp
[root@lincoding /]# pwd
/
方式一和方式二執行完切換到/tmp
目錄的Shell腳本後,終端所在的目錄沒有變化,還是在/
根目錄,說明方式一和方式二的執行方式是對當前的環境是沒有影響的。
原因就是方式一和二執行Shell腳本時,會產生子進程來執行Shell腳本,當腳本執行結束後,子進程退出,回到了父進程,那麼對當前所在的環境就不會產生影響。
接下來看,方式三執行結果:
[root@omp120 /]# source ./test.sh
/tmp
[root@omp120 tmp]# pwd
/tmp
方式四執行結果:
[root@omp120 /]# . ./test.sh
/tmp
[root@omp120 tmp]# pwd
/tmp
從上面方式三和方式四的執行結果,可以發現,執行完切換到/tmp
目錄的Shell腳本後,當前的終端環境所在的目錄已經被切換了到了/tmp
目錄,說明方式三和方式四的執行方式是對當前的環境是有影響的。
小結
方式一和方式二執行Shell腳本時,會產生子進程來執行Shell腳本,當腳本執行結束後,子進程退出,回到了父進程,那麼對當前所在的環境就不會產生影響。
而方式二和方式四是在當前環境執行Shell腳本,也就是在當前進程執行Shell腳本,其執行的結果就會影響當前的環境。