環境變數與 PATH
環境變數是傳給程式的一組鍵值。其中 PATH 最重要:它是一串目錄,用冒號分隔;你在終端機打 python 或 brew 時,系統就依這個順序找可執行檔。
先看現況
which -a 會列出所有符合的路徑。若第一個不是你想用的版本,就是 PATH 順序錯了。
PATH 在 Mac 上怎麼組出來
/usr/libexec/path_helper讀:/etc/paths(系統預設,通常含/usr/local/bin、/usr/bin、/bin、/usr/sbin、/sbin)/etc/paths.d/裡的每一個檔
- 登入 shell 接著讀
~/.zprofile(Homebrew 的brew shellenv應該在這裡) - 互動 shell 再讀
~/.zshrc(個人 alias、nvm、prompt)
Apple Silicon 的 Homebrew 在 /opt/homebrew;Intel 在 /usr/local。brew shellenv 會設定 PATH、MANPATH、INFOPATH 與 HOMEBREW_PREFIX,不要手打半套。
# Apple Silicon 常見寫法(放在 ~/.zprofile)
eval "$(/opt/homebrew/bin/brew shellenv)"
# Intel 常見寫法
eval "$(/usr/local/bin/brew shellenv)"
安裝程式結束時印在畫面上的兩行,照抄最安全。寫完後新開一個終端機視窗,再 which brew。
不要只改目前這個視窗就以為永遠好了
export PATH="/opt/homebrew/bin:$PATH" 只對這個 session 有效。要持久,必須寫進 ~/.zprofile 或 ~/.zshrc。
該寫在哪個檔
| 檔案 | 適合放什麼 | 不適合放什麼 |
|---|---|---|
~/.zshenv |
極少數「所有 zsh 都要有」的變數 | PATH(容易被 path_helper 重排) |
~/.zprofile |
Homebrew、JAVA_HOME、登入時只要設一次的 PATH |
一堆 alias(非互動腳本用不到也沒關係,但會變亂) |
~/.zshrc |
alias、prompt、補全、nvm / pyenv 初始化 | 給 launchd 或 GUI App 用的變數 |
| GUI App | 用 launchctl setenv 或該 App 自己的設定 |
以為改了 .zshrc,Cursor / VS Code 圖示啟動也會讀到 |
VS Code / Cursor 若從 Dock 點圖示啟動,不會自動讀 .zshrc。內建終端機通常會;從 Spotlight 開的 GUI 則不一定。需要讓 GUI 也看到變數時,把設定放在 ~/.zprofile,或在該軟體的設定裡指定 PATH。
常見變數
# 編輯器:git commit 會叫它
export EDITOR="nano" # 或 vim、code --wait
# 語系
export LANG="zh_TW.UTF-8"
export LC_ALL="zh_TW.UTF-8"
# Java(路徑依實際安裝為準)
export JAVA_HOME="$(/usr/libexec/java_home)"
# 把個人腳本放進 PATH
export PATH="$HOME/bin:$PATH"
新增個人指令的乾淨做法:把腳本放到 ~/bin(或 ~/.local/bin),再把該目錄 prepend 到 PATH,而不是把一堆絕對路徑寫進 alias。
改完如何驗證
若 type brew 顯示 not found:
- 確認 Homebrew 是否真的在
/opt/homebrew/bin/brew或/usr/local/bin/brew - 確認
brew shellenv寫在~/.zprofile而不是只貼在聊天紀錄 - 用
zsh -xl 2>&1 | grep -i brew看有沒有讀到那一行