確認當前使用的 Shell 類型 (bash/zsh/fish/ksh 等) 有多種途徑,各有適用場景與準確度。本文整理 6 種方法,從最推薦的即時進程偵測到環境變數查詢,助您精準識別 Shell 環境。
ps | grep $$ | awk '{print $4}'
# 輸出範例:bash
$$ 為當前 Shell 進程 PID。ps 列出當前終端進程,grep $$ 過濾自身,awk 取第 4 欄 (COMMAND)。exec zsh) 也能正確顯示。echo $SHELL
# 輸出:/bin/bash
/etc/passwd 設定,不隨運行時切換 Shell 而變化。$SHELL 仍為 /bin/bash。echo $0
# 輸出:-bash 或 bash
- 表示登入 Shell。env | grep SHELL
# SHELL=/bin/bash
等同方法二,適用於檢視所有環境變數時順便確認。
grep ^$USER: /etc/passwd | cut -d: -f7
# 或
getent passwd $USER | cut -d: -f7
# 輸出:/bin/bash
查詢用戶**預設登入 Shell**,非當前運行 Shell。
ps -ef | grep $$ | grep -v grep | grep -v ps
# 輸出範例:
# user 4750 4745 0 15:47 pts/1 00:00:00 bash
grep -v 排除 grep 與 ps 自身進程。
| 需求 | 推薦方法 | 原因 |
|---|---|---|
| 腳本中判斷當前 Shell | 方法一 (ps/$$) | 即時、準確、跨 Shell 通用 |
| 互動式快速確認 | 方法二 (echo $SHELL) | 最快、鍵入最少 |
| 檢查登入 Shell 設定 | 方法五 (/etc/passwd) | 反映帳戶配置而非運行狀態 |
| 除錯 Shell 切換問題 | 方法一 + 方法二對比 | 對比即時 vs 登入 Shell 差異 |