濮阳杆衣贸易有限公司

主頁 > 知識庫 > 在Shell腳本中調(diào)用另一個腳本的三種方式講解

在Shell腳本中調(diào)用另一個腳本的三種方式講解

熱門標(biāo)簽:房產(chǎn)證地圖標(biāo)注的兩個面積 北京電銷機器人對市場的影響 武漢語音電銷機器人加盟 地圖標(biāo)注x是啥意思 湖北孝感如何辦理 輝縣市地圖標(biāo)注 同花順電話機器人微信 威海電銷外呼系統(tǒng)好用嗎 外呼系統(tǒng)的合法性

先來說一下主要以下有幾種方式:

  • fork: 如果腳本有執(zhí)行權(quán)限的話,path/to/foo.sh。如果沒有,sh path/to/foo.sh。
  • exec: exec path/to/foo.sh
  • source: source path/to/foo.sh

fork

fork 是最普通的, 就是直接在腳本里面用 path/to/foo.sh 來調(diào)用 foo.sh 這個腳本,比如如果是 foo.sh 在當(dāng)前目錄下,就是 ./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í)行被調(diào)用的腳本. 被調(diào)用的腳本與父腳本在同一個 Shell 內(nèi)執(zhí)行。但是使用 exec 調(diào)用一個新腳本以后, 父腳本中 exec 行之后的內(nèi)容就不會再執(zhí)行了。這是 exec source 的區(qū)別.

source

fork 的區(qū)別是不新開一個子 Shell 來執(zhí)行被調(diào)用的腳本,而是在同一個 Shell 中執(zhí)行. 所以被調(diào)用的腳本中聲明的變量和環(huán)境變量, 都可以在主腳本中進行獲取和使用。

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

第一個腳本,我們命名為 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。當(dāng)執(zhí)行完腳本 2.sh 后,腳本 1.sh 后面的內(nèi)容是否還執(zhí)行。

chmod +x 1.sh 2.sh 給兩個腳本加上可執(zhí)行權(quán)限后執(zhí)行情況:

fork

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

exec

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

source

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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

您可能感興趣的文章:
  • Java程序去調(diào)用并執(zhí)行shell腳本及問題總結(jié)(推薦)
  • Spring Boot調(diào)用 Shell 腳本實現(xiàn)看門狗功能
  • 詳解Shell腳本中調(diào)用另一個Shell腳本的三種方式
  • Java遠程調(diào)用Shell腳本并獲取輸出信息【推薦】
  • JAVA如何調(diào)用Shell腳本
  • Shell腳本中引用、調(diào)用另一個腳本文件的2種方法
  • Java調(diào)用linux shell腳本的方法
  • Nodejs中調(diào)用系統(tǒng)命令、Shell腳本和Python腳本的方法和實例
  • Shell腳本調(diào)用另一個腳本的三種方法

標(biāo)簽:蚌埠 迪慶 武威 麗江 紹興 西寧 安康 日喀則

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《在Shell腳本中調(diào)用另一個腳本的三種方式講解》,本文關(guān)鍵詞  在,Shell,腳本,中,調(diào)用,另一個,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《在Shell腳本中調(diào)用另一個腳本的三種方式講解》相關(guān)的同類信息!
  • 本頁收集關(guān)于在Shell腳本中調(diào)用另一個腳本的三種方式講解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    达拉特旗| 吉木乃县| 龙游县| 定襄县| 商水县| 陕西省| 达日县| 嵩明县| 仙游县| 左云县| 那坡县| 惠州市| 阿荣旗| 资溪县| 舟曲县| 抚远县| 陆河县| 喀喇| 高雄县| 综艺| 芦溪县| 高碑店市| 万载县| 逊克县| 海林市| 温州市| 浙江省| 新乡县| 新巴尔虎右旗| 沙雅县| 禄丰县| 灵宝市| 云梦县| 河曲县| 合江县| 兖州市| 进贤县| 神池县| 库伦旗| 大洼县| 鄂伦春自治旗|