国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

關(guān)于 Bash 腳本中 Shebang 的趣事

這篇具有很好參考價(jià)值的文章主要介紹了關(guān)于 Bash 腳本中 Shebang 的趣事。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

哈嘍大家好,我是咸魚

不知道小伙伴們?cè)趯?Bash 腳本或者說看別人的 Bash 腳本的時(shí)候有沒有注意過腳本的第一行

#!/bin/bash

Bash 腳本的第一行往往以 #! 開頭,這一行稱作 shebang 行

在 類 UNIX 系統(tǒng)中,shebang 行用來指定腳本的解釋器路徑,通常出現(xiàn)在第一行,格式如下

#! interpreter_path

shebang 行中開頭 #! 字符的作用是告訴操作系統(tǒng)這不是一個(gè)普通二進(jìn)制文件,而是需要通過解釋器運(yùn)行的東西

而這個(gè)解釋器則通過 #! 字符后面來指定。例如 /bin/bash 表示使用 bash 解釋器來執(zhí)行該腳本文件

下面則是一些 Bash 腳本的 shebang 行,指定了不同的解釋器

#! /usr/bin/perl
#! /usr/bin/awk
#! /usr/bin/python

那么這時(shí)候小伙伴們可能就會(huì)有疑問:我忘了加 shebang 行,腳本為什么還能執(zhí)行?

如果一個(gè)腳本沒有添加 shebang 行來指定解釋器路徑,則默認(rèn)情況下系統(tǒng)會(huì)使用默認(rèn)的 shell 來執(zhí)行腳本,系統(tǒng)默認(rèn)的 shell 可以通過下面的命令來查看

# 一般情況下默認(rèn)的 shell 為bash
echo $SHELL

現(xiàn)在我們知道了 shebang 行的作用,那么我們現(xiàn)在來編寫一個(gè)腳本并修改 shebang 行試試

test.sh 內(nèi)容如下:

#!/bin/bash
echo Hello

先給 test.sh 腳本添加一下執(zhí)行權(quán)限

chmod +x test.sh

接下來我們用幾種方式來執(zhí)行這個(gè)腳本
關(guān)于 Bash 腳本中 Shebang 的趣事
可以看到腳本都成功執(zhí)行了

下面我們來改一下 shebang 行,將其改成其他命令

#!/usr/bin/ls -l
echo Hello

然后我們分別用幾種方式來執(zhí)行這個(gè)腳本
關(guān)于 Bash 腳本中 Shebang 的趣事
上面腳本執(zhí)行的結(jié)果是不是看的一臉懵逼,說實(shí)話我一開始看到的時(shí)候也是很懵

我們先來看下這四種腳本執(zhí)行方式的區(qū)別

  • bash tesh.sh

這種方式執(zhí)行腳本的原理是將 test.sh 作為參數(shù)傳給 bash 解釋器(命令)來執(zhí)行,而不是 test,sh 自己來執(zhí)行

這種方式執(zhí)行腳本不需要給腳本文件添加執(zhí)行權(quán)限、不需要寫 shebang 行指定解釋器路徑,因?yàn)槟_本是作為參數(shù)被傳給 bash 來執(zhí)行

  • sh test.sh

這種執(zhí)行腳本的方式跟上面的方式原理一樣,都是將腳本作為參數(shù)傳進(jìn)去,只不過是這個(gè)方式用的是 sh 解釋器(命令),而不是 bash

  • /root/test.sh

這種是通過絕對(duì)路徑去執(zhí)行腳本,通過絕對(duì)路徑來執(zhí)行腳本就需要腳本擁有執(zhí)行權(quán)限

當(dāng)使用絕對(duì)路徑來執(zhí)行腳本時(shí),操作系統(tǒng)需要知道該腳本文件所使用的解釋器類型,這就需要依靠腳本文件中的 shebang 行

實(shí)際上你用絕對(duì)路徑執(zhí)行腳本的時(shí)候,如果里面定義了 shebang 行(例如 #! /bin/bash

那么實(shí)際上跟下面的命令是一樣的

/bin/bash /root/test.sh

在執(zhí)行腳本的時(shí)候,操作系統(tǒng)會(huì)讀取腳本的 shebang 行

如果你的 shebang 行是其他 Linux 命令而不是解釋器,那么就會(huì)導(dǎo)致操作系統(tǒng)將你的 shebang 行當(dāng)作命令,而你的腳本則是命令的參數(shù)

就好比上面的例子,我將 shebang 行改成了 #! /usr/bin/ls -l ,當(dāng)我執(zhí)行腳本的時(shí)候其實(shí)就是下面這樣的

/usr/bin/ls -l /root/test.sh

這樣會(huì)導(dǎo)致腳本無法執(zhí)行

  • ./test.sh

這種是通過相對(duì)路徑去執(zhí)行腳本,跟上面用絕對(duì)路徑執(zhí)行腳本方式是一樣的,只不過區(qū)別是一個(gè)是相對(duì)路徑一個(gè)是絕對(duì)路徑

總結(jié):

  • shebang 行通常出現(xiàn)在 UNIX 系統(tǒng)的腳本當(dāng)中,用來指定腳本的解釋器路徑,出現(xiàn)在第一行,以 #! 開頭
  • 如果腳本里面沒有定義 shebang 行,系統(tǒng)會(huì)去找默認(rèn)的解釋器,默認(rèn)解釋器用 echo $SHELL 查看
  • 用 bash 或者 sh 命令執(zhí)行腳本的時(shí)候,其實(shí)是把腳本作為參數(shù)傳給 bash 或 sh 命令了,這時(shí)候腳本可以不添加執(zhí)行權(quán)限、可以不需要 shebang 行
  • 如果用絕對(duì)路徑或者相對(duì)路徑的方式來執(zhí)行腳本,需要腳本擁有執(zhí)行權(quán)限,如果 shebang 行定義的不是解釋器而是其他命令,就會(huì)導(dǎo)致腳本無法執(zhí)行

附上參考鏈接:Shebang Shenanigans :: Linus Karlsson文章來源地址http://www.zghlxwxcb.cn/news/detail-435842.html

到了這里,關(guān)于關(guān)于 Bash 腳本中 Shebang 的趣事的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • BASH shell腳本篇2——條件命令

    BASH shell腳本篇2——條件命令

    這篇文章介紹下BASH?shell中的條件相關(guān)的命令,包括:if, case, while, until, for, break,?continue。之前有介紹過shell的其它基本命令,請(qǐng)參考:BASH shell腳本篇1——基本命令 1. If語(yǔ)句 if 語(yǔ)句用于在順序執(zhí)行語(yǔ)句的流程中執(zhí)行條件任務(wù)。 If 語(yǔ)句通常用于在Bash腳本中做出決定。它們根據(jù)

    2024年02月07日
    瀏覽(24)
  • BASH shell腳本篇5——文件處理

    BASH shell腳本篇5——文件處理

    ?這篇文章介紹下BASH?shell中的文件處理。之前有介紹過shell的其它命令,請(qǐng)參考: BASH shell腳本篇1——基本命令 BASH shell腳本篇2——條件命令 BASH shell腳本篇3——字符串處理 BASH shell腳本篇4——函數(shù) 在Bash Shell腳本中,可以使用多種方法來對(duì)文件進(jìn)行操作,包括讀取文件或?qū)?/p>

    2024年02月07日
    瀏覽(18)
  • Linux Bash Shell 腳本入門(2)——GNU

    ? 目錄 Linux Bash Shell 腳本入門(2)——GNU GNU與Linux GNU GNU的組成 Shell GNOME桌面環(huán)境 X Window 軟件 GNOME 可點(diǎn)擊內(nèi)容,大部分來自維基百科,可以點(diǎn)擊了解詳情。 GNU操作系統(tǒng)起源于GNU計(jì)劃,由理查德·斯托曼在麻省理工學(xué)院人工智能實(shí)驗(yàn)室發(fā)起,希望發(fā)展出一套完整的開放源代碼

    2024年02月19日
    瀏覽(53)
  • BASH shell腳本篇3——字符串處理

    BASH shell腳本篇3——字符串處理

    這篇文章介紹下BASH?shell中的字符串處理的相關(guān)命令。之前有介紹過shell的其它命令,請(qǐng)參考: BASH shell腳本篇1——基本命令 BASH shell腳本篇2——條件命令 Bash字符串也是一種數(shù)據(jù)類型,它用于表示文本而不是數(shù)字,它是一組可能還包含數(shù)字的字符的組合。如果數(shù)字想要表示為

    2024年02月07日
    瀏覽(55)
  • redis7.0編譯安裝 + bash安裝腳本

    以下操作在debian11、deiban12下演示,ubuntu通用,其它系列l(wèi)inux發(fā)行版自行安裝依賴,其余一樣 以7.2.1版本為例進(jìn)行安裝 最后的bash腳本是對(duì)前面的操作的封裝,一鍵即配置完成,即可使用 1.安裝依賴 2.下載 redis官方下載頁(yè)面 redis github頁(yè)面 如果下載不下來,復(fù)制鏈接用迅雷這類工

    2024年02月16日
    瀏覽(16)
  • 我用GPT寫了一個(gè)關(guān)于GPT的文章,大家看看寫的如何

    我用GPT寫了一個(gè)關(guān)于GPT的文章,大家看看寫的如何

    目錄 I. 引言 1.1 研究背景和意義 1.2 現(xiàn)有研究綜述 II. ChatGPT技術(shù)介紹 2.1 ChatGPT技術(shù)原理 2.2 ChatGPT技術(shù)優(yōu)勢(shì) III. ChatGPT技術(shù)在智能客服中的應(yīng)用和挑戰(zhàn) 3.1 ChatGPT技術(shù)在智能客服中的應(yīng)用 3.2 ChatGPT技術(shù)在智能客服中面臨的挑戰(zhàn) 3.3 優(yōu)化用戶體驗(yàn)提升ChatGPT技術(shù)在智能客服中的作用 IV

    2024年02月07日
    瀏覽(54)
  • 在當(dāng)前bash(sh)中執(zhí)行腳本和注冊(cè)函數(shù)

    在當(dāng)前bash(sh)中執(zhí)行腳本和注冊(cè)函數(shù)

    在研究《管理Python虛擬環(huán)境的腳本》時(shí),我們使用了source指令而沒有使用sh或者bash來執(zhí)行腳本,就是因?yàn)閟ource指令可以讓腳本在當(dāng)前bash(sh)中執(zhí)行;而sh或者bash則會(huì)新啟動(dòng)一個(gè)bash來執(zhí)行。 我們可以通過下面這個(gè)腳本做測(cè)試 processInfo: 45322 bash 40883 bash 當(dāng)前bash的進(jìn)程ID是40883,新

    2024年01月20日
    瀏覽(25)
  • 用bash腳本實(shí)現(xiàn)openocd一次性燒錄

    有的時(shí)候eide擴(kuò)展燒錄莫名奇妙就會(huì)失靈,彈出\\\"upload busy\\\"的錯(cuò)誤,網(wǎng)上也查不到是怎么回事,只好手動(dòng)打指令,奈何openocd燒錄指令又太過麻煩,于是多方查找整了個(gè)適合自己的腳本供自己實(shí)驗(yàn),這里把腳本分享出來,方便自己在公司的時(shí)候就能在網(wǎng)上找到,也方便各位開發(fā),

    2024年02月07日
    瀏覽(18)
  • 編寫B(tài)ash腳本程序從記錄文件中提取history命令的優(yōu)化,再介紹linux bash語(yǔ)法和結(jié)構(gòu)

    目? ? ? ? 錄 一、引言 二、腳本代碼實(shí)現(xiàn) 三、bash語(yǔ)法和結(jié)構(gòu) (一)基本語(yǔ)法 1、腳本開始與結(jié)束 2、注釋 3、變量 4、數(shù)據(jù)類型 5、控制結(jié)構(gòu) 6、循環(huán)控制 7、函數(shù) 8、算術(shù)運(yùn)算 9、算術(shù)操作符和邏輯操作符 (二)命令相關(guān) 1、命令執(zhí)行 2、命令的執(zhí)行順序 3、命令的執(zhí)行優(yōu)先級(jí)

    2024年01月25日
    瀏覽(23)
  • bash : 無法將“bash”項(xiàng)識(shí)別為 cmdlet、函數(shù)、腳本文件或可運(yùn)行程序的名稱。(解決方案)

    bash : 無法將“bash”項(xiàng)識(shí)別為 cmdlet、函數(shù)、腳本文件或可運(yùn)行程序的名稱。請(qǐng)檢查名稱的拼寫,如果包括路徑,請(qǐng)確保路徑正確,然 后再試一次。 本來是想在Windows10系統(tǒng)下運(yùn)行sh腳本文件,但是調(diào)用 bash 命令,在網(wǎng)上直接搜索錯(cuò)誤原因,網(wǎng)上給出的解決方案是在powershell里面使

    2024年02月10日
    瀏覽(84)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包