這個符號(#!)的名稱,叫做」shebang」或者」sha-bang」(還有其他一些名稱,不過我一般就用這兩個)。shebang這個符號通常在unix系統的指令碼中第一行開頭中寫到,它指明了執行這個指令碼檔案的解釋程式。
如果#!之後的解釋程式是乙個可執行檔案,那麼執行這個指令碼時,它就會把檔名及其引數一起作為引數傳給那個解釋程式去執行。
如果#!指定的解釋程式沒有可執行許可權,則會報錯「bad interpreter: permission denied」。如果#!指定的解釋程式不是乙個可執行檔案,那麼指定的解釋程式會被忽略,轉而交給當前的shell去執行這個指令碼。
如果#!指定的解釋程式不存在,那麼會報錯「bad interpreter: no such file or directory」。注意:#!之後的解釋程式,需要寫其絕對路徑(如:#!/bin/bash),它是不會自動到$path中尋找直譯器的。
當然,如果你使用」bash test.sh」這樣的命令來執行指令碼,那麼#!這一行將會被忽略掉,直譯器當然是用命令列中顯式指定的bash。
例如:demo.sh
#!/bin/bash
echo "hello, world."
echo "hello, $." #1代表的是輸入程式的第乙個引數
chmod a+x demo.sh #這裡是給demo.sh讀寫許可權
#具體的許可權說明,在這:linux給.sh執行檔案賦許可權
/test.sh leng (執行之時,其實是 /bin/bash ./test.sh leng)
結果為:
hello, world.
hello, leng.
參考**
Linux上的Shebang符號
使用linux或者unix系統的同學可能都對 這個符號並不陌生,但是你真的了解它嗎?本文了將給你簡單介紹一下shebang 這個符號。首先,這個符號 的名稱,英譯過來叫做 shebang 或者 sha bang 還有其他一些名稱,不過我一般就用這兩個 詞源與歷史 shebang的名字來自於sharp...
LINUX上的SHEBANG符號
這個符號 的名稱,叫做 shebang 或者 sha bang 還有其他一些名稱,不過我一般就用這兩個 shebang這個符號通常在unix系統的指令碼中第一行開頭中寫到,它指明了執行這個指令碼檔案的解釋程式。如果 之後的解釋程式是乙個可執行檔案,那麼執行這個指令碼時,它就會把檔名及其引數一起作為引...
shell指令碼編寫中的 shebang詳解
shebang 這個符號通常在 unix 系統的指令碼中第一行開頭中寫到,它指明了執行這個指令碼檔案的解釋程式。1.如果指令碼檔案中沒有 這一行,那麼他執行時會預設使用當前 shell 去解釋這個指令碼 即 shell 環境變數 2.如果 之後的解釋程式是乙個可執行檔案,那麼執行這個指令碼是,他就會...