使用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.
主要參考資料: