91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Shell腳本中調用另一個腳本

發布時間:2021-06-08 15:31:56 來源:億速云 閱讀:781 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關怎么在Shell腳本中調用另一個腳本,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

fork

fork 是最普通的, 就是直接在腳本里面用 path/to/foo.sh 來調用 foo.sh 這個腳本,比如如果是 foo.sh 在當前目錄下,就是 ./foo.sh。運行的時候 terminal 會新開一個子 Shell 執行腳本 foo.sh,子 Shell 執行的時候, 父 Shell 還在。子 Shell 執行完畢后返回父 Shell。 子 Shell 從父 Shell 繼承環境變量,但是子 Shell 中的環境變量不會帶回父 Shell。

exec

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

source

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

其實從命名上可以感知到其中的細微區別,下面通過兩個腳本來體會三種調用方式的不同:

第一個腳本,我們命名為 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"

注:這兩個腳本中的參數 $$ 用于返回腳本的 PID , 也就是進程 ID。這個例子是想通過顯示 PID 判斷兩個腳本是分開執行還是同一進程里執行,也就是是否有新開子 Shell。當執行完腳本 2.sh 后,腳本 1.sh 后面的內容是否還執行。

chmod +x 1.sh 2.sh 給兩個腳本加上可執行權限后執行情況:

fork

怎么在Shell腳本中調用另一個腳本

fork 方式可以看出,兩個腳本都執行了,運行順序為1-2-1,從兩者的PID值(1.sh PID=82266, 2.sh PID=82267),可以看出,兩個腳本是分成兩個進程運行的。

exec

怎么在Shell腳本中調用另一個腳本

exec 方式運行的結果是,2.sh 執行完成后,不再回到 1.sh。運行順序為 1-2。從pid值看,兩者是在同一進程 PID=82287 中運行的。

source

怎么在Shell腳本中調用另一個腳本

source方式的結果是兩者在同一進程里運行。該方式相當于把兩個腳本先合并再運行。

怎么在Shell腳本中調用另一個腳本

上述就是小編為大家分享的怎么在Shell腳本中調用另一個腳本了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大同县| 格尔木市| 游戏| 太白县| 新乡县| 台南县| 吉水县| 乌审旗| 肥乡县| 东丽区| 彭泽县| 绍兴市| 乾安县| 酉阳| 玉溪市| 会昌县| 乳山市| 永修县| 闻喜县| 新宁县| 昭苏县| 南丹县| 金平| 延吉市| 新营市| 阿合奇县| 塔城市| 贵溪市| 京山县| 灵川县| 湘潭县| 渭南市| 云南省| 灵武市| 鄯善县| 麟游县| 信丰县| 溧阳市| 建平县| 晋州市| 布拖县|