必须用ps -p $$确认当前会话真实shell,因echo $shell仅显示默认预设值;ps输出cmd列为zsh或bash即为实际运行类型,带短横表示登录shell,否则为交互式shell。

在Mac终端里搞不清自己正用zsh还是bash,会导致配置文件写错位置、环境变量不生效、别名失效等一系列问题,必须第一时间确认当前Shell类型。
用$SHELL查看系统默认Shell
打开终端,输入:echo $SHELL并回车。
输出结果是系统为你的用户账户设定的默认Shell路径,比如/bin/zsh或/bin/bash。这一步只反映登录时的预设值,【不代表当前终端窗口实际运行的Shell】——如果你中途执行过bash或zsh命令,这个值就不会变。
用ps -p $$确认当前会话真实Shell
在同一个终端窗口中,运行:ps -p $$。
看输出中CMD列的内容:显示zsh就是zsh,显示bash就是bash。这是最可靠的判断依据,因为它读取的是当前进程的真实名称。
注意:如果输出里CMD列是-zsh或-bash(开头带短横),说明这是登录Shell;没短横则是普通交互式Shell。两者加载的配置文件不同,但类型判断逻辑一致。
用echo $0快速核对Shell名称
直接输入:echo $0。
它会打印当前Shell进程的名称,比如zsh或bash,和ps -p $$的CMD列基本一致,但更简洁。这个命令响应快,适合反复验证。
方法一:适用于刚打开终端、未手动切换过Shell的场景;方法二:适用于你怀疑自己可能已进入子Shell(比如输过bash又没退出)的情况。
检查系统支持哪些Shell
运行:cat /etc/shells。
这会列出所有被系统认可、允许设为默认Shell的路径。如果某Shell不在这个文件里,chsh就无法将它设为默认值。
常见路径包括/bin/zsh、/bin/bash、/usr/bin/fish等。如果你发现想用的Shell没出现在这里,得先用brew install fish安装,再把它加进/etc/shells(需sudo权限)。











