Interpreter Files

Concept

Interpreter files 是一種特殊的文字檔案,它的第一行以 #!(稱為 shebang 或 hashbang)開頭,後面接著一個 interpreter 程式的路徑。這種機制讓作業系統知道應該用哪個程式來執行這個檔案

Structure

假設 script.sh 長這樣

#!/bin/bash
echo "Hello, World!"

第一行 #!/bin/bash 就是 shebang line,它告訴系統:「請用 /bin/bash 這個程式來執行我」

Operating Mechanism

當你執行一個有 execute permission 的 interpreter file 時,kernel 會做以下事情:

  1. 讀取檔案開頭:kernel 檢查檔案的前兩個 bytes
  2. 辨識 shebang:如果是 #!(0x23 0x21),kernel 知道這是個 interpreter file
  3. 解析路徑:kernel 讀取 shebang 後面的 interpreter 路徑(直到換行或空白)
  4. 執行 interpreter:kernel 實際上執行的不是原本的 script,而是執行 interpreter,並把 script 的路徑當作參數傳給它

實際上,當你執行:

./myscript.sh

Kernel 內部會轉換成類似:

/bin/bash ./myscript.sh

Why use Interpreter Files?

Pros

  1. 此程式用戶不需要知道要用哪個 interpreter 就可以直接執行程式
  2. 可以指定特定版本的 interpreter,像 Python3.11、Python 3.12 之類的

Cons

  1. kernel 會有一點壓力