使用Linux或者unix系統的人們對#!這個符號都不陌生,但要說出個具體的因此然來,不少人估計還真不行,咱們有必要就此整理一下。Shebang這個符號一般在Unix系統的腳本中第一行開頭中寫到,它指明瞭執行這個腳本文件的解釋程序。具體地:bash
- 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。
咱們能夠本身寫一個解釋器來驗證一下這些點。spa