詳解Shell腳本中調(diào)用另一個Shell腳本的三種方式
主要以下有幾種方式:
Command | Explanation |
---|---|
fork | 新開一個子 Shell 執(zhí)行,子 Shell 可以從父 Shell 繼承環(huán)境變量,但是子 Shell 中的環(huán)境變量不會帶回給父 Shell。 |
exec | 在同一個 Shell 內(nèi)執(zhí)行,但是父腳本中 exec 行之后的內(nèi)容就不會再執(zhí)行了 |
source | 在同一個 Shell 中執(zhí)行,在被調(diào)用的腳本中聲明的變量和環(huán)境變量, 都可以在主腳本中進(jìn)行獲取和使用,相當(dāng)于合并兩個腳本在執(zhí)行。 |
第一種:fork 特點(diǎn):會生成子PID而且可重復(fù)被調(diào)用。
♦fork 是最普通的, 就是直接在腳本里面用 path/to/foo.sh 來調(diào)用
♦foo.sh 這個腳本,比如如果是 foo.sh 在當(dāng)前目錄下,就是 ./foo.sh。運(yùn)行的時(shí)候 terminal 會新開一個子 Shell 執(zhí)行腳本 foo.sh,子 Shell 執(zhí)行的時(shí)候, 父 Shell 還在。子 Shell 執(zhí)行完畢后返回父 Shell。 子 Shell 從父 Shell 繼承環(huán)境變量,但是子 Shell 中的環(huán)境變量不會帶回父 Shell。
1.進(jìn)入 編輯:
[root@localhost ~]# vim liqiang-2.sh
2.編輯內(nèi)容調(diào)用寫法:
echo 在這里調(diào)用 ./liqiang.sh
3.輸出結(jié)果
[root@localhost ~]# ./liqiang-2.sh
在這里調(diào)用
hollo
hollo
第二種:exec 特點(diǎn):exec調(diào)用一次之后的所有代碼都不執(zhí)行
♦exec 與 fork 不同,不需要新開一個子 Shell 來執(zhí)行被調(diào)用的腳本. 被調(diào)用的腳本與父腳本在同一個 Shell 內(nèi)執(zhí)行。但是使用 exec 調(diào)用一個新腳本以后, 父腳本中 exec 行之后的內(nèi)容就不會再執(zhí)行了。這是 exec 和 source 的區(qū)別.
1.編輯內(nèi)容調(diào)用寫法:
echo 在這里調(diào)用 ./liqiang.sh echo 這里是exec函數(shù)調(diào)用 exec ./liqiang-3.sh echo 這里是source source liqiang-4.sh echo 在這里調(diào)用 ./liqiang.sh echo 這里是exec函數(shù)調(diào)用 exce liqiang-3.sh echo 這里是source source liqiang-4.sh echo 在這里調(diào)用 ./liqiang.sh echo 這里是exec函數(shù)調(diào)用 exce liqiang-3.sh echo 這里是source source liqiang-4.sh
2.輸出結(jié)果:特點(diǎn)在于執(zhí)行了第一個exec之后下面的就再也不執(zhí)行了。
[root@localhost ~]# ./liqiang-2.sh 在這里調(diào)用 hollo hollo 這里是exec函數(shù)調(diào)用 看看這里調(diào)用幾次 調(diào)用一次就對了
第三種:sourcesource特點(diǎn)不會生成子PID也就是子進(jìn)程,他就行把被用的腳本拷貝到當(dāng)前shell腳本中執(zhí)行,可以重復(fù)被調(diào)用。
♦與 fork 的區(qū)別是不新開一個子 Shell 來執(zhí)行被調(diào)用的腳本,而是在同一個 Shell 中執(zhí)行. 所以被調(diào)用的腳本中聲明的變量和環(huán)境變量, 都可以在主腳本中進(jìn)行獲取和使用。
1.編輯內(nèi)容調(diào)用寫法:
echo 在這里調(diào)用 ./liqiang.sh echo 這里是exec函數(shù)調(diào)用這次被注釋掉了 #exec ./liqiang-3.sh echo 這里是source source liqiang-4.sh echo 在這里調(diào)用 ./liqiang.sh echo 這里是exec函數(shù)調(diào)用被注釋掉了 #exce liqiang-3.sh echo 這里是source source liqiang-4.sh echo 在這里調(diào)用 ./liqiang.sh echo 這里是exec函數(shù)調(diào)用 exec liqiang-3.sh echo 這里是source source liqiang-4.sh
♦2.執(zhí)行結(jié)果:
[root@localhost ~]# ./liqiang-2.sh 在這里調(diào)用 hollo hollo 這里是exec函數(shù)調(diào)用這次被注釋掉了 這里是source 看看這里調(diào)用幾次 沒有限制就對了 在這里調(diào)用 hollo hollo 這里是exec函數(shù)調(diào)用被注釋掉了 這里是source 看看這里調(diào)用幾次 沒有限制就對了 在這里調(diào)用 hollo hollo 這里是exec函數(shù)調(diào)用#之后的沒被調(diào)用了
注意:
♦source方式的結(jié)果是兩者在同一進(jìn)程里運(yùn)行。該方式相當(dāng)于把兩個腳本先合并再運(yùn)行。
♦給多個腳本賦權(quán)限
chmod a+x liqiang-2.sh liqiang-3.sh liqiang-4.sh
到此這篇關(guān)于詳解Shell腳本中調(diào)用另一個Shell腳本的三種方式的文章就介紹到這了,更多相關(guān)Shell調(diào)用另一個Shell腳本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
分享一個實(shí)用的iptables腳本(各種過濾寫法參考)
這篇文章主要介紹了分享一個實(shí)用的iptables腳本(各種過濾寫法參考),需要的朋友可以參考下2014-04-04shell函數(shù)內(nèi)調(diào)用另一個函數(shù)(不帶返回值和帶返回值)
本文主要介紹了shell函數(shù)內(nèi)調(diào)用另一個函數(shù)(不帶返回值和帶返回值),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08Shell腳本之Expect免交互的實(shí)現(xiàn)
這篇文章主要介紹了Shell腳本之Expect免交互的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10linux下解決?git?clone每次都要輸入用戶名密碼問題(推薦)
這篇文章主要介紹了linux下解決?git?clone每次都要輸入用戶名密碼問題,先用git?config?--global?user.name?'username’和git?config?--global?user.email?'xxx@xxx.com’配置一下用戶名和郵箱,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10linux下定時(shí)執(zhí)行任務(wù)的方法及crontab 用法說明(收集整理)
這篇文章主要介紹了 linux下定時(shí)執(zhí)行任務(wù)的方法及crontab 用法說明(收集整理),需要的朋友可以參考下2017-04-04