Linux中國

釋伴:Linux 上的 Shebang 符號(#!)

使用 Linux 或者 unix 系統的同學可能都對 #! 這個符號並不陌生,但是你真的了解它嗎?

本文將給你簡單介紹一下 Shebang(「#!」)這個符號。

這個符號(#!)的名稱,叫做「Shebang」或者「Sha-bang」。長期以來,shebang 都沒有正式的中文名稱。Linux 中國翻譯組的 GOLinux 將其翻譯為:釋伴,即解釋伴隨行的簡稱,同時又是 shebang 的音譯。

詞源與歷史

Shebang 的名字來自於 SHArp 和 bang,或 haSH bang 的縮寫,用來指代 Shebang 中 #! 兩個符號的典型 Unix 名稱。 Unix 術語中,#號通常稱為 sharp,hash 或 mesh;而!號則常常稱為 bang。也有看法認為,shebang 名字中的 sh 來自於默認 shell —— Bourne shell 的名稱 sh,因為常常使用 shebang 調用之。

在 2010 年版的 Advanced bash scripting guide(revision 6.2)中,shebang 被稱為「sha-bang」,同時提到「也寫作 she-bang 或 sh-bang」,但該文件中沒有提到「shebang」這一形式。

[丹尼斯·里奇](http://zh.wikipedia.org/wiki/%E4%B8%B9%E5%B0%BC%E6%96%AF%C2%B7%E9%87%8C%E5%A5%87 "丹尼斯·里奇")在被問及他會如何稱呼這一特性時,他答道:

發信人:"Ritchie, Dennis M (Dennis) CTR " dmr@[redacted]

收信人:[redacted]@talisman.org

日期:Thu, 19 Nov 2009 18:37:37 -0600

主題:RE: What do -you- call your #! line?

我不記得我們曾經給它取過一個適當的名字。導入這一特性已經是相當晚了--我覺得我是從關於伯克利 Unix 的 UCB 會議上的某人那裡得到的這一靈感;我可能是首先實現它的人之一,但這個創意是來自於別人的。

至於它的名字:可能是類似於「hash-bang」的英國風描述性文字,但我沒有在任何場合使用類似寵物的名字來描述它。

此致,

Dennis

用途

Shebang 這個符號通常在 Unix 系統的腳本中第一行開頭中寫到,它指明了執行這個腳本文件的解釋程序。

  1. 如果腳本文件中沒有 #! 這一行,那麼它執行時會默認用當前 Shell 去解釋這個腳本(即:$SHELL 環境變數)。

  2. 如果#!之後的解釋程序是一個可執行文件,那麼執行這個腳本時,它就會把文件名及其參數一起作為參數傳給那個解釋程序去執行。

  3. 如果#!指定的解釋程序沒有可執行許可權,則會報錯「bad interpreter: Permission denied」。如果#!指定的解釋程序不是一個可執行文件,那麼指定的解釋程序會被忽略,轉而交給當前的 shell 去執行這個腳本。

  4. 如果#!指定的解釋程序不存在,那麼會報錯「bad interpreter: No such file or directory」。注意:#!之後的解釋程序,需要寫其絕對路徑(如:#!/bin/bash),它是不會自動到 $PATH 中尋找解釋器的。

  5. 當然,如果你使用 bash test.sh 這樣的命令來執行腳本,那麼#!這一行將會被忽略掉,解釋器當然是用命令行中顯式指定的 bash。


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    這個站點使用 Akismet 來減少垃圾評論。了解你的評論數據如何被處理

    More in:Linux中國

    Linux中國

    關於Linux防火牆iptables的面試問答

    Nishita Agarwal是Tecmint的用戶,她將分享關於她剛剛經歷的一家公司(印度的一家私人公司Pune)的面試經驗。在面試中她被問及許多不同的問題,但她是iptables方面的專家,因此她想分享這些關於iptables的問題和相應的答案給那些以後可能會進行相關面試的人。 所有的問題和相應的答案都基於Nishita Agarwal的記憶並經過了重寫。 嗨,朋友!我叫Nishita Agarwal。我已經取得了理學學士學位,我的專業集中在UNIX和它的變種(BSD,Linux)。它們一直深深的吸引著我。我在存儲方面有1年多的經驗。我正在尋求職業上的變化,並將供職於印度的P
    Linux中國

    Lets Encrypt 已被所有主流瀏覽器所信任

    旨在讓每個網站都能使用 HTTPS 加密的非贏利組織 Lets Encrypt 已經得了 IdenTrust的交叉簽名,這意味著其證書現在已經可以被所有主流的瀏覽器所信任。從這個裡程碑事件開始,訪問者訪問使用了Lets Encrypt 證書的網站不再需要特別配置就可以得到 HTTPS 安全保護了。 Lets Encrypt 的兩個中級證書 ...
    Linux中國

    SSL/TLS 加密新紀元 – Lets Encrypt

    根據 Let's Encrypt 官方博客消息,Let's Encrypt 服務將在下周(11 月 16 日)正式對外開放。 Let's Encrypt 項目是由互聯網安全研究小組(ISRG,Internet Security Research Group)主導並開發的一個新型數字證書認證機構(CA,Certificate ...