LINUX上的SHEBANG符號(#!)

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

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

首先,這個符號(#!)的名稱,叫做”Shebang”或者”Sha-bang”(還有其他一些名稱,不過我一般就用這兩個)。

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。

例如:test.sh

#!/bin/bash

echo"hello, world."

echo"hello, ${1}."

chmod a+x ?test.sh

./test.sh ? Jay ?(運行之時,其實是 /bin/bash ./test.sh Jay)

結果為:

hello, world.

hello, Jay.

主要參考資料:

http://en.wikipedia.org/wiki/Shebang_(Unix)

http://people.csail.mit.edu/jaffer/Docupage/sharpbang.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,948評論 18 139
  • 一,shell題記 不懂shell的程序員不是好程序員,學習shell是為了自動化,使用自動化可以非常有效的提高工...
    架構師小秘圈閱讀 8,741評論 3 70
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數據革命閱讀 12,228評論 2 33
  • BASH的基本語法 ·最簡單的例子—— Hello World! ·關于輸入、輸出和錯誤輸出 ·BASH中對變量的...
    約落小宮山閱讀 1,236評論 0 13
  • 文 | 畢淑敏 由于工作的關系,常常旅行。旅行比居家的時候辛苦,這是不消說的。中國有句古話–在家千日好,出門一時難...
    日光傾城52fhx閱讀 166評論 0 0