今天才注意到 macOS 上的 hashbang(也稱 shebang) 寫法有點奇特,會長得像是這樣:
#! /usr/bin/env python3
...
才發現自己跟 shell script 一點都不熟,首先 hashbang 要寫用來執行腳本的執行檔完整路徑,由於是完整路徑,如果遇到環境不同,執行檔路徑不一樣的系統,同一個腳本就可能會找不到執行檔而無法執行。為了解決這個問題, 就有一個特別的執行檔,也就是剛剛看到的 /usr/bin/env
,單獨執行它會顯示所有的環境變數,像是這樣:
$ env
USER=meebox
LOGNAME=meebox
HOME=/Users/meebox
PATH=/Users/meebox/.nvm/versions/node/v24.4.0/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/opt/homebrew/bin
SHELL=/bin/zsh
...
LANG=zh_TW.UTF-8
LC_ALL=zh_TW.UTF-8
_=/usr/bin/env
如果加上額外的引數,它就會依據 PATH
環境變數去找該引數指定的執行檔,所以剛剛看到的那一行:
#! /usr/bin/env python3
就可以在不需要寫出 python3
絕對路徑的前提下,自動找到並以 python3
來執行腳本了。而且這個 /usr/bin/env
也不是 macOS 才有,現代的 Linux 發行版本預設也幾乎都會安裝這個屬於 coreutils
套件的 env
工具程式。
Top comments (0)