您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家?guī)碛嘘P怎么在Shell腳本中調用另一個腳本,文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
fork
fork
是最普通的, 就是直接在腳本里面用 path/to/foo.sh
來調用 foo.sh
這個腳本,比如如果是 foo.sh 在當前目錄下,就是 ./foo.sh。運行的時候 terminal 會新開一個子 Shell 執(zhí)行腳本 foo.sh,子 Shell 執(zhí)行的時候, 父 Shell 還在。子 Shell 執(zhí)行完畢后返回父 Shell。 子 Shell 從父 Shell 繼承環(huán)境變量,但是子 Shell 中的環(huán)境變量不會帶回父 Shell。
exec
exec
與 fork
不同,不需要新開一個子 Shell 來執(zhí)行被調用的腳本. 被調用的腳本與父腳本在同一個 Shell 內執(zhí)行。但是使用 exec 調用一個新腳本以后, 父腳本中 exec 行之后的內容就不會再執(zhí)行了。這是 exec
和 source
的區(qū)別.
source
與 fork
的區(qū)別是不新開一個子 Shell 來執(zhí)行被調用的腳本,而是在同一個 Shell 中執(zhí)行. 所以被調用的腳本中聲明的變量和環(huán)境變量, 都可以在主腳本中進行獲取和使用。
其實從命名上可以感知到其中的細微區(qū)別,下面通過兩個腳本來體會三種調用方式的不同:
第一個腳本,我們命名為 1.sh
:
#!/usr/bin/env bash A=1 echo "before exec/source/fork: PID for 1.sh = $$" export A echo "In 1.sh: variable A=$A" case $1 in --exec) echo -e "==> using exec…\n" exec ./2.sh ;; --source) echo -e "==> using source…\n" . ./2.sh ;; *) echo -e "==> using fork by default…\n" ./2.sh ;; esac echo "after exec/source/fork: PID for 1.sh = $$" echo -e "In 1.sh: variable A=$A\n"
第二個腳本,我們命名為 2.sh
:
#!/usr/bin/env bash echo "PID for 2.sh = $$" echo "In 2.sh get variable A=$A from 1.sh" A=2 export A echo -e "In 2.sh: variable A=$A\n"
注:這兩個腳本中的參數(shù) $$
用于返回腳本的 PID , 也就是進程 ID。這個例子是想通過顯示 PID 判斷兩個腳本是分開執(zhí)行還是同一進程里執(zhí)行,也就是是否有新開子 Shell。當執(zhí)行完腳本 2.sh
后,腳本 1.sh
后面的內容是否還執(zhí)行。
chmod +x 1.sh 2.sh
給兩個腳本加上可執(zhí)行權限后執(zhí)行情況:
fork
fork
方式可以看出,兩個腳本都執(zhí)行了,運行順序為1-2-1,從兩者的PID值(1.sh PID=82266, 2.sh PID=82267),可以看出,兩個腳本是分成兩個進程運行的。
exec
exec
方式運行的結果是,2.sh 執(zhí)行完成后,不再回到 1.sh。運行順序為 1-2。從pid值看,兩者是在同一進程 PID=82287 中運行的。
source
source
方式的結果是兩者在同一進程里運行。該方式相當于把兩個腳本先合并再運行。
上述就是小編為大家分享的怎么在Shell腳本中調用另一個腳本了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。