Shebang

簡介

Shebang 係 Unix 同類 Unix 操作系統中嘅一個特殊符號,由字符 #! 組成, 用嚟指示腳本文件應該由邊個解釋器嚟執行。佢通常出喺腳本文件嘅第一行,後面跟住解釋器嘅路徑。 Shebang 使得腳本文件能夠好似可執行程序一樣直接運行,而唔使手動調用解釋器。

名稱由來

# 喺英文中表示 hash 或 sharp,! 喺編程同命令行中表示 bang, 呢兩個符號組合埋一齊就成咗 hash-bang 或 sharp-bang。 隨住時間嘅推移,hash-bang 最終簡化為 shebang。

指定解釋器

Shebang 後面指定嘅路徑係解釋器嘅位置,例如:

#!/bin/bash

系統會使用該路徑下嘅 bash 嚟執行呢個腳本內容。

統一執行形式

唔同類型嘅腳本可以統一使用 ./file 嘅形式執行,無需顯式調用解釋器。

#!/bin/bash

無需使用 bash file 執行,直接使用 ./file

#!/bin/python3

無需使用 python file 執行,直接使用 ./file

常見例子

我哋喺 bash 腳本中常常會見到下面嘅例子。

#!/usr/bin/env bash

env 係一個與環境變量相關嘅命令。 當後面跟嘅參數係 bash 時,佢會根據環境變量 PATH 提供嘅路徑查找 bash 嘅解釋器。 咁樣做嘅好處係無需寫死 bash 解釋器嘅路徑,因為喺唔同嘅系統中,bash 解釋器可能會喺唔同嘅位置。

type -a bash
bash is /usr/bin/bash
bash is /bin/bash

對於上面嘅 python 例子,更好嘅 Shebang 係使用 env。

#!/usr/bin/env python

手動調用

如果冇 Shebang,可以手動調用解釋器。

bash script.sh