快速入門Shell編程(三)腳本不同執行方式的影響

執行命令的方式

執行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腳本,其執行的結果就會影響當前的環境。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章