使用 zsh 作為 Mac 的預設 shell

若以 macOS Catalina 啟動,Mac 會以 zsh 作為預設登入 shell 及互動 shell。你也可以在舊版 macOS 中將 zsh 設為預設 shell。

根據預設設定,Mac 的登入 shell 和互動 shell 會以 zsh 或 bash 作為指令列解譯器:

  • 若以 macOS Catalina 啟動,zsh (Z shell) 是所有新建使用者帳戶的預設 shell。
  • bashmacOS Mojave 及之前版本的預設 shell。

zsh 與 Bourne shell (sh) 的兼容性非常高,亦與 bash 大致兼容,但存在一些差異。如要進一步了解 zsh 及其詳盡的指令列完成系統,請在「終端機」中輸入「man zsh」。
  

如何更改預設 shell

無論你的使用者帳戶預設使用 zsh (建議)、bash 或其他 shell,都可透過「用戶與群組」偏好設定或指令列更改。

透過「用戶與群組」偏好設定

  1. 選擇 Apple 選單  >「系統偏好設定」,然後按一下「用戶與群組」。
  2. 按一下鎖定圖示 ,然後輸入帳戶名稱和密碼。
  3. 在左側的使用者名單中,按住 Control 鍵並按一下你的使用者名稱,然後選擇「進階選項」。 
  4. 在「登入 shell」選單中選擇所需的 shell,然後按一下「好」儲存變更。

透過指令列

在「終端機」中,輸入 $ chsh -s path,當中的 path 是 /etc/shells 所列的其中一個 shell 路徑,例如 /bin/zsh、/bin/bash、/bin/csh、/bin/dash、/bin/ksh、/bin/sh 或 /bin/tcsh。
  

如何在毋須更改預設 shell 的情況下改用其他 shell

如果不想「終端機」在新的「終端機」視窗及分頁中使用預設登入 shell:

  1. 開啟「終端機」,然後選擇「終端機」>「偏好設定」。
  2. 在「一般」面板上,選擇「指令 (完整路徑)」。 
  3. 在畫面顯示的欄位中,輸入 /etc/shells 所列的其中一個 shell 路徑,例如 /bin/zsh、/bin/bash、/bin/csh、/bin/dash、/bin/ksh、/bin/sh 或 /bin/tcsh。

如你選用 bash shell 而 macOS Catalina 預設使用其他 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 對於第三方網站的準確性或可靠性不作任何聲明。如需進一步資料,請聯絡相關供應商

發佈日期: