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