萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 查看當前 Shell 類型 6 大方法:ps 即時偵測、環境變數、口令檔與進程樹分析

確認當前使用的 Shell 類型 (bash/zsh/fish/ksh 等) 有多種途徑,各有適用場景與準確度。本文整理 6 種方法,從最推薦的即時進程偵測到環境變數查詢,助您精準識別 Shell 環境。

方法一:即時偵測當前進程 Shell (最推薦)

ps | grep $$ | awk '{print $4}'
# 輸出範例:bash
  • $$ 為當前 Shell 進程 PID。
  • ps 列出當前終端進程,grep $$ 過濾自身,awk 取第 4 欄 (COMMAND)。
  • 反映**當前實際運行**的 Shell,即便臨時切換 (如 exec zsh) 也能正確顯示。

方法二:環境變數 SHELL (最常用但非即時)

echo $SHELL
# 輸出:/bin/bash
  • 登入時由系統根據 /etc/passwd 設定,不隨運行時切換 Shell 而變化。
  • 若從 bash 啟動 zsh,$SHELL 仍為 /bin/bash。

方法三:$0 參數 (簡潔但非所有 Shell 支援)

echo $0
# 輸出:-bash 或 bash
  • Bash/Ksh/Zsh 支援;部分 Shell (如 dash) 可能不支援。
  • 前綴 - 表示登入 Shell。

方法四:環境變數搜尋

env | grep SHELL
# SHELL=/bin/bash

等同方法二,適用於檢視所有環境變數時順便確認。

方法五:口令檔查詢登入 Shell

grep ^$USER: /etc/passwd | cut -d: -f7
# 或
getent passwd $USER | cut -d: -f7
# 輸出:/bin/bash

查詢用戶**預設登入 Shell**,非當前運行 Shell。

方法六:完整進程樹分析 (ps -ef)

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 關係。

Shell 類型查看示意

方法選擇指南

總結:腳本開發請用 ps | grep $$ | awk '{print $4}' 即時偵測;日常互動 echo $SHELL 足矣。理解「登入 Shell」與「當前運行 Shell」的區別,避免環境判斷邏輯錯誤。

copyright © 萬盛學電腦網 all rights reserved
需求推薦方法原因
腳本中判斷當前 Shell方法一 (ps/$$)即時、準確、跨 Shell 通用
互動式快速確認方法二 (echo $SHELL)最快、鍵入最少
檢查登入 Shell 設定方法五 (/etc/passwd)反映帳戶配置而非運行狀態
除錯 Shell 切換問題方法一 + 方法二對比對比即時 vs 登入 Shell 差異