使用 zsh 作為 Mac 的預設 shell
若以 macOS Catalina 啟動,Mac 會以 zsh 作為預設登入 shell 及互動 shell。你也可以在舊版 macOS 中將 zsh 設為預設 shell。
根據預設,Mac 的登入 shell 及互動 shell 會以 zsh 或 bash 作為指令列解譯器:
若以 macOS Catalina 啟動,zsh (Z shell) 是所有新建用戶帳戶的預設 shell。
bash 是 macOS Mojave 及之前版本的預設 shell。
zsh 與 Bourne shell (sh) 的相容性非常高,亦與 bash 大致相容,但存在一些差異。如要進一步了解 zsh 及其詳盡的指令列完成系統,請在「終端機」中輸入「man zsh
」。
如何更改預設 shell
無論你的用戶帳戶設定為使用 zsh (建議設定)、bash 還是其他 shell,你都可以從指令列或「用戶與群組」設定更改預設 shell。
透過指令列更改
在「終端機」輸入 $ chsh -s path
,其中 path 是 /etc/shells 列出的其中一個 shell 路徑,例如 /bin/zsh、/bin/bash、/bin/csh、/bin/dash、/bin/ksh、/bin/sh 或 /bin/tcsh。
透過「用戶與群組」設定更改
在 macOS Ventura 或之後版本中:
選擇 Apple 選單 >「系統設定」,然後按一下側邊欄中的「用戶與群組」。
在右側的用戶列表中,按住 Control 鍵並按一下你的用戶名稱或圖片,然後選擇「進階選項」。
系統出現提示時,請輸入你的用戶名稱和密碼。
從「登入 shell」選單中選擇所需的 shell,然後按一下「好」以儲存變更。
在較舊版本的 macOS 中:
選擇 Apple 選單 >「系統偏好設定」,然後按一下「用戶與群組」。
按一下
,然後輸入你的用戶名稱和密碼。在左側的用戶名單中,按住 Control 鍵並按一下你的用戶名稱,然後選擇「進階選項」。
從「登入 shell」選單中選擇所需的 shell,然後按一下「好」以儲存變更。
如何在無需更改預設 shell 的情況下改用其他 shell
如果不想「終端機」在新的「終端機」視窗及分頁中使用預設登入 shell:
開啟「終端機」,然後選擇「終端機」>「設定」(或「偏好設定」)。
在「一般」面板上,選擇「指令 (完整路徑)」。
在旁邊的欄位中,輸入 /etc/shells 所列出的其中一個 shell 路徑,例如 /bin/zsh、/bin/bash、/bin/csh、/bin/dash、/bin/ksh、/bin/sh 或 /bin/tcsh。
如你選用 bash shell 而 macOS 預設使用其他 shell,畫面便會出現訊息,顯示預設互動 shell 現已改為 zsh。只需將以下指令加到 ~/.bash_profile 或 ~/.profile,即可關閉此警告訊息:
export BASH_SILENCE_DEPRECATION_WARNING=1
如何切換至 zsh 描述檔及提示
如果你使用 bash 描述檔,例如設定環境變數、別名或路徑變數,便應該轉用等同於 zsh 的 shell。例如:
.zprofile 等同於 .bash_profile,必須在登入時執行 (包括透過 SSH)
.zshrc 等同於 .bashrc,必須在每次新的「終端機」工作階段中執行
如你使用 .profile (POSIX 的相容描述檔),只需將以下指令加到 .zprofile,即可讓 zsh 自動讀取描述檔中的設定:
[[ -e ~/.profile ]] && emulate sh -c 'source ~/.profile'
你也可以將 bash 描述檔中的部分設定移到 zsh 描述檔,而無需作任何更改。舉例來說,如要設定環境變數:export MY_SETTING=1
。
zsh 可以識別 bash 無法識別的提示標識符,並以指定顏色顯示語法,不但較為乾淨俐落,更無需使用複雜的 ANSI 跳脫序列。舉例來說,以下為 .bash_profile 的其中一個 bash 預設提示語法:
export PS1="\[\e[92;40m\]\h\[\e[m\]:\[\e[93m\]\W\[\e[m\] \\$ "
如要在使用 .zprofile 或 .zshrc 時,將 bash 提示轉換為 zsh 提示:
export PS1="%10F%m%f:%11F%1~%f \$ "
詳情請查看 zsh man 頁面。
如何測試 shell 程式碼
如要在 macOS Catalina 或之後版本中測試程式碼與 Bourne 相容 shell 的相容性,你可以將 /var/select/sh 改為 /bin/bash、/bin/dash 或 /bin/zsh。請注意,如將 /var/select/sh 改為 bash 以外的 shell,使用 bash 規則的程式碼未必可以正常運作。
你可以執行 zsh --emulate sh
指令,讓 zsh 模擬 sh 的功能。
對於非 Apple 製造產品,或者並非由 Apple 控制或測試的獨立網站,其相關資訊的提供不應詮釋為受到 Apple 所推薦或認可。Apple 對於第三方網站或產品的選擇、表現或使用,概不承擔任何責任。Apple 對於第三方網站的準確性或可靠性不作任何聲明。如需進一步資料,請聯絡相關供應商。