Shell 腳本中調用另外一個 Shell 腳本的三種方式

主要如下有幾種方式:shell

Command Explanation
fork 新開一個子 Shell 執行,子 Shell 能夠從父 Shell 繼承環境變量,可是子 Shell 中的環境變量不會帶回給父 Shell。
exec 在同一個 Shell 內執行,可是父腳本中 exec 行以後的內容就不會再執行了
source 在同一個 Shell 中執行,在被調用的腳本中聲明的變量和環境變量, 均可以在主腳本中進行獲取和使用,至關於合併兩個腳本在執行。
 

 

 

 

 

 

第一種:fork 特色:會生成子PID並且可重複被調用vim

  ♦fork 是最普通的, 就是直接在腳本里面用 path/to/foo.sh 來調用 函數

  ♦foo.sh 這個腳本,好比若是是 foo.sh 在當前目錄下,就是 ./foo.sh。運行的時候 terminal 會新開一個子 Shell 執行腳本 foo.sh,子 Shell 執行的時候, 父 Shell 還在。子 Shell 執行完畢後返回父 Shell。 子 Shell 從父 Shell 繼承環境變量,可是子 Shell 中的環境變量不會帶回父 Shell。spa

1.進入 編輯:code

 [root@localhost ~]# vim liqiang-2.sh

2.編輯內容調用寫法:blog

echo 在這裏調用 ./liqiang.sh

3.輸出結果繼承

[root@localhost ~]# ./liqiang-2.sh
在這裏調用 hollo hollo

第二種:exec 特色:exec調用一次以後的全部代碼都不執行進程

  ♦exec 與 fork 不一樣,不須要新開一個子 Shell 來執行被調用的腳本. 被調用的腳本與父腳本在同一個 Shell 內執行。可是使用 exec 調用一個新腳本之後, 父腳本中 exec 行以後的內容就不會再執行了。這是 exec 和 source 的區別.terminal

1.編輯內容調用寫法:io

echo 在這裏調用 ./liqiang.sh echo 這裏是exec函數調用 exec ./liqiang-3.sh echo 這裏是source source liqiang-4.sh echo 在這裏調用 ./liqiang.sh echo 這裏是exec函數調用 exce liqiang-3.sh echo 這裏是source source liqiang-4.sh echo 在這裏調用 ./liqiang.sh echo 這裏是exec函數調用 exce liqiang-3.sh echo 這裏是source source liqiang-4.sh

2.輸出結果:特色在於執行了第一個exec以後下面的就不再執行了。 

[root@localhost ~]# ./liqiang-2.sh
在這裏調用 hollo hollo 這裏是exec函數調用 看看這裏調用幾回 調用一次就對了

第三種:sourcesource特色不會生成子PID也就是子進程,他就行把被用的腳本拷貝到當前shell腳本中執行,能夠重複被調用。

  ♦與 fork 的區別是不新開一個子 Shell 來執行被調用的腳本,而是在同一個 Shell 中執行. 因此被調用的腳本中聲明的變量和環境變量, 均可以在主腳本中進行獲取和使用。

1.編輯內容調用寫法:

echo 在這裏調用 ./liqiang.sh echo 這裏是exec函數調用此次被註釋掉了 #exec ./liqiang-3.sh
echo 這裏是source source liqiang-4.sh echo 在這裏調用 ./liqiang.sh echo 這裏是exec函數調用被註釋掉了 #exce liqiang-3.sh
echo 這裏是source source liqiang-4.sh echo 在這裏調用 ./liqiang.sh echo 這裏是exec函數調用 exec liqiang-3.sh echo 這裏是source source liqiang-4.sh 

♦2.執行結果:

[root@localhost ~]# ./liqiang-2.sh
在這裏調用 hollo hollo 這裏是exec函數調用此次被註釋掉了 這裏是source 看看這裏調用幾回 沒有限制就對了 在這裏調用 hollo hollo 這裏是exec函數調用被註釋掉了 這裏是source 看看這裏調用幾回 沒有限制就對了 在這裏調用 hollo hollo 這裏是exec函數調用#以後的沒被調用了

注意:

  ♦source方式的結果是二者在同一進程裏運行。該方式至關於把兩個腳本先合併再運行。

  ♦給多個腳本賦權限

chmod a+x liqiang-2.sh liqiang-3.sh liqiang-4.sh
相關文章
相關標籤/搜索