shell腳本的執行幾種方式的區別

shell腳本的執行幾種方式的區別

bash xx.sh 或者sh xxx.sh

腳本沒有可執行權限或沒有指定解析器,使用的方法。

會產生一個子shell來執行腳本,腳本執行完畢後再返回父shell,所以腳本里面的變量獲取不了。

 

/xxx/xxx.sh 或 ./xxx.sh

腳本需要有執行權限,通過chmod +x xxx.sh來添加即可。

會產生一個子shell來執行腳本,腳本執行完畢後再返回父shell,所以腳本里面的變量獲取不了。

 

source xxx.sh 或者 . xxx.sh

先讀入或加載xxx.sh腳本,然後從上到下依次執行腳本。是在當前的shell執行腳本,腳本中的變量可以正常獲取輸出!

source 和 . 相當於include的功能!

在一個腳本中需要引用另一個腳本,直接source script.sh 然後這個腳本產生的變量可以在當前腳本中使用了。如果是sh script.sh則變量獲取不了。

 

sh < xxx.sh 或者 cat xxx.sh|sh

 

例子:

[xxx@hostname ~]$ cat b.sh        //b.sh腳本內容如下
user=`whoami`

[xxx@hostname ~]$ ./b.sh          //沒有chmod +x 使用路徑直接執行,包沒有權限
-bash: ./b.sh: Permission denied

[xxx@hostname ~]$ bash b.sh      //沒有執行權行或沒有指定解析器,使用sh 執行

[xxx@hostname ~]$ echo $user     //腳本產生的變量爲空!!因爲sh 執行變量保存到子shell中了


[xxx@hostname ~]$ source b.sh   //需要在當前父shell獲取腳本產生的變量,使用source 

[xxx@hostname ~]$ echo $user      // 腳本的變量可以獲取
xxx

 

 

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