在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么shell腳本中執(zhí)行命令要加exec?這個(gè)exec有什么作用呢?

dyquk4xk2p3d ? 來(lái)源:ytcoode ? 2023-08-21 09:10 ? 次閱讀

0x01 示例

正常情況下,如果我們想要在shell腳本中執(zhí)行一個(gè)命令,我們只用將該命令原樣寫(xiě)到這個(gè)shell腳本中就好了。

但有時(shí)候我們會(huì)發(fā)現(xiàn),在一些shell腳本中,在某個(gè)命令之前,會(huì)有一個(gè)exec,比如下圖所示:

556cab1a-3fb2-11ee-ac96-dac502259ad0.png

上圖中,我們要在shell腳本中執(zhí)行一個(gè)sleep命令,但在該命令之前,我們加了個(gè)exec,那這個(gè)exec有什么作用呢?

0x02 exec的作用

我們先看下exec對(duì)應(yīng)的文檔,看看官方是如何解釋的。

因?yàn)閑xec是bash的一個(gè)內(nèi)置命令,所以我們可以在bash中,用help命令,查詢exec對(duì)應(yīng)的文檔。

55944d82-3fb2-11ee-ac96-dac502259ad0.png

上圖文檔的大致意思為,將shell替換為exec指定的命令,這個(gè)解釋比較模糊,我們做幾個(gè)實(shí)驗(yàn)具體看下。

0x03 實(shí)驗(yàn)

還是使用上面的那個(gè)腳本,不過(guò)我們先把exec去掉,然后執(zhí)行。

在該腳本執(zhí)行后,我們用ps命令查看和該腳本相關(guān)的進(jìn)程樹(shù):

55b495e2-3fb2-11ee-ac96-dac502259ad0.png

由上圖可見(jiàn),我們先在bash中執(zhí)行了a.sh這個(gè)測(cè)試腳本,然后又在a.sh腳本中,執(zhí)行了sleep命令。

該執(zhí)行結(jié)果產(chǎn)生了上圖中的進(jìn)程樹(shù),即sleep進(jìn)程的父進(jìn)程為a.sh進(jìn)程,a.sh進(jìn)程的父進(jìn)程為bash進(jìn)程。

我們?cè)侔裡xec加回來(lái),然后再執(zhí)行該腳本,該次執(zhí)行后,和a.sh腳本相關(guān)的進(jìn)程樹(shù)為:

55d6178a-3fb2-11ee-ac96-dac502259ad0.png

看上圖中,這次沒(méi)有了a.sh進(jìn)程,為什么呢?因?yàn)樗籹leep程序替換掉了。

這就是exec的用的,它會(huì)告訴linux內(nèi)核,直接在當(dāng)前shell腳本進(jìn)程中,加載并執(zhí)行目標(biāo)程序。

這一過(guò)程會(huì)覆蓋掉原shell腳本進(jìn)程中的各種代碼和數(shù)據(jù)信息,使得原shell腳本進(jìn)程立即停止運(yùn)行,并轉(zhuǎn)向執(zhí)行目標(biāo)程序代碼。

exec命令本質(zhì)上是執(zhí)行了execve系統(tǒng)調(diào)用,如果想要了解該命令的具體細(xì)節(jié),可以查看execve的man文檔。

0x04 注意事項(xiàng)

因?yàn)閑xec會(huì)立即抹掉當(dāng)前shell腳本進(jìn)程中的各種數(shù)據(jù),然后加載并執(zhí)行目標(biāo)程序代碼,所以在exec命令之后,除了錯(cuò)誤檢查邏輯外,不應(yīng)該再有其他邏輯,因?yàn)檫@些邏輯永遠(yuǎn)都不會(huì)被執(zhí)行了。

看個(gè)例子:

568ae854-3fb2-11ee-ac96-dac502259ad0.png

看上圖中,只輸出了hello,并沒(méi)有輸出world,因?yàn)閑cho world命令寫(xiě)在了exec echo hello命令之后,它是不會(huì)被執(zhí)行的。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • LINUX內(nèi)核
    +關(guān)注

    關(guān)注

    1

    文章

    317

    瀏覽量

    22080
  • Shell
    +關(guān)注

    關(guān)注

    1

    文章

    369

    瀏覽量

    23803

原文標(biāo)題:為什么shell腳本中執(zhí)行命令要加exec

文章出處:【微信號(hào):良許Linux,微信公眾號(hào):良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux執(zhí)行shell腳本的兩種方式

    shell腳本,通常這個(gè)腳本通過(guò)一系列的操作編寫(xiě)的腳本,這些腳本都主要用于應(yīng)用的啟動(dòng)停止等。那么
    發(fā)表于 11-18 16:49 ?1984次閱讀
    Linux<b class='flag-5'>中</b><b class='flag-5'>執(zhí)行</b><b class='flag-5'>shell</b><b class='flag-5'>腳本</b>的兩種方式

    【Linux學(xué)習(xí)雜談】之exec族函數(shù)

    。小技巧:which + 命令,可以查看命令所在的全路徑假設(shè)我們執(zhí)行ls -a -l這個(gè)命令
    發(fā)表于 09-08 13:14

    labview執(zhí)行系統(tǒng)命令函數(shù)system exec.vi的使用

    網(wǎng)上關(guān)于labview執(zhí)行系統(tǒng)命令函數(shù)system exec.vi的使用有些少。好幾次要用它,都要花好長(zhǎng)時(shí)間去找資源研究怎么使用。想在這里再問(wèn)一下,關(guān)于
    發(fā)表于 01-21 09:32

    Shell腳本編程筆記(二)

    本帖最后由 iysheng 于 2017-2-26 11:18 編輯 exec命令總結(jié):腳本調(diào)試參數(shù)總結(jié):字符串比較:shell數(shù)值比較:sh
    發(fā)表于 02-26 11:15

    [轉(zhuǎn)]find命令結(jié)合exec和xargs使用的區(qū)別

    本文轉(zhuǎn)自:老男孩教育官網(wǎng)轉(zhuǎn)載請(qǐng)注明出處:https://www.oldboyedu.com/zuixin_wenzhang/index/id/269.htmlfind命令結(jié)合exec和xargs
    發(fā)表于 09-03 15:26

    如何創(chuàng)建和執(zhí)行一個(gè)簡(jiǎn)單的Linux shell腳本

     如果您愿意嘗試更長(zhǎng)的shell腳本,請(qǐng)將下面的shell腳本(并附加為PDF和ODT文件)復(fù)制到文本編輯器
    的頭像 發(fā)表于 11-06 17:28 ?1.3w次閱讀

    find exec命令實(shí)例教程

    Linux find命令是根據(jù)指定條件搜索文件和目錄的絕佳工具。exec允許您對(duì)找到的文件執(zhí)行指定操作。
    的頭像 發(fā)表于 12-06 17:08 ?2995次閱讀

    通過(guò)一個(gè)腳本搞懂fork、source和exec

    Source模式下,子shell執(zhí)行時(shí)獲取的環(huán)境變量會(huì)會(huì)影響到父shell。與fork的區(qū)別在于,不會(huì)額外打開(kāi)一個(gè)sub-shell來(lái)執(zhí)行
    的頭像 發(fā)表于 02-03 16:05 ?2037次閱讀

    Qt的三個(gè)exec之間什么聯(lián)系

    在Qt,常見(jiàn)到三個(gè)exec,第一個(gè)是QApplication::exec(),第二個(gè)是QEventLoop::exec,第三個(gè)是QThread::
    的頭像 發(fā)表于 03-06 09:44 ?2786次閱讀

    shell腳本本身自帶的命令詳解

    除了以文件形式保存在/usr/bin下面的命令shell腳本還可以使用shell本身自帶的命令
    的頭像 發(fā)表于 05-23 09:32 ?1319次閱讀
    <b class='flag-5'>shell</b><b class='flag-5'>腳本</b>本身自帶的<b class='flag-5'>命令</b>詳解

    shell腳本基本命令

    Shell腳本是一種可執(zhí)行文件,它包含了一組用某種特定語(yǔ)言編寫(xiě)的命令,這些命令可以被解釋器(如bash)
    的頭像 發(fā)表于 11-08 10:08 ?2429次閱讀

    shell腳本串行和并行執(zhí)行設(shè)置

    Shell腳本,你可以使用不同的技巧來(lái)實(shí)現(xiàn)串行和并行執(zhí)行。 串行執(zhí)行 實(shí)現(xiàn)串行
    的頭像 發(fā)表于 11-08 10:25 ?2931次閱讀

    shell并行執(zhí)行java腳本

    Shell是一種用于解釋執(zhí)行命令腳本語(yǔ)言,而Java是一種跨平臺(tái)的面向?qū)ο缶幊陶Z(yǔ)言。在某些情況下,我們可能需要在Shell腳本
    的頭像 發(fā)表于 11-08 10:29 ?829次閱讀

    docker exec命令的使用方法

    有用的命令,用于在正在運(yùn)行的容器執(zhí)行命令。 在本文中,我將詳細(xì)介紹Docker exec命令的使用方法,包括
    的頭像 發(fā)表于 11-23 09:33 ?1999次閱讀

    執(zhí)行shell腳本的方式包括什么

    執(zhí)行Shell腳本的方式很多種,以下是一些常見(jiàn)的方法: 直接運(yùn)行腳本文件 在命令
    的頭像 發(fā)表于 08-30 15:17 ?546次閱讀
    主站蜘蛛池模板: 日韩一级精品视频在线观看 | 亚洲免费一级片 | 午夜看一级特黄a大片 | 色资源在线观看 | 1000部又爽又黄的做黄禁片 | 黄色三级网站免费 | 丝袜紧身裙国产在线播放 | 欧美成人三级伦在线观看 | 五月婷婷影视 | 人人看人人添人人爽 | 广东毛片 | 欧美一级看片免费观看视频在线 | 在线观看一区二区三区视频 | 四虎永久影院永久影库 | 91大神精品| 色爱区综合激情五月综合色 | 久久精品影视 | 你懂得在线网址 | 性色在线播放 | 中文字幕在线一区二区在线 | 日本xxwwxxww视频免费丝袜 | 日韩系列| 国产性片在线 | 色婷婷久久综合中文久久蜜桃 | 日本一二区视频 | 高清毛片一区二区三区 | 黄h视频在线观看视频 | 福利片免费一区二区三区 | 国产午夜免费视频片夜色 | 婷婷亚洲综合五月天在线 | www.av片| h网站免费在线观看 | 国产亚洲欧美一区二区 | 亚州1区2区3区4区产品乱码2021 | 亚洲va欧美va国产综合久久 | 国产成人精品日本亚洲专 | 久久99热不卡精品免费观看 | 国产在线成人一区二区 | 午夜剧场毛片 | 欧美三级一区二区三区 | 久久影视一区 |