Mac终端默认Shell由登录Shell、终端App启动行为和当前会话三层独立决定;需分别用chsh修改系统级登录Shell、在终端“设置→通用”中指定新窗口Shell路径、或直接输入bash/zsh临时切换当前会话。

Mac终端默认使用的Shell环境不是单点设置,而是由登录Shell、终端应用启动行为、当前会话三者共同决定——改错其中一层,新开窗口或重新登录后仍会回到旧Shell。
确认当前默认登录Shell
先查清系统真正记录的登录Shell路径,避免盲目操作:
在终端中执行:echo $SHELL
再验证系统级记录:dscl . -read ~ UserShell
这两条命令结果不一致时,说明终端App覆盖了登录Shell设置,后续需分层处理。
列出所有被系统允许设为默认的Shell:cat /etc/shells
【/bin/bash不在输出中时,直接chsh切换会失败】
修改系统级默认登录Shell
这一步影响图形界面登录、SSH连接等所有新登录会话,必须用chsh完成:
方法一:切换为zsh(推荐)
执行:chsh -s /bin/zsh
输入当前用户密码,成功后无提示。
方法二:切换为bash(仅限兼容需求)
若cat /etc/shells未显示/bin/bash,先执行:sudo sh -c "echo '/bin/bash' >> /etc/shells"
再运行:chsh -s /bin/bash
⚠️ 修改后必须完全退出当前图形会话:选择苹果菜单 → “登出”,再重新登录;仅关闭终端窗口或重启Terminal App无效。
统一终端新建窗口实际运行的Shell
即使登录Shell已改为zsh,macOS终端App仍可能按旧设置启动新窗口——这是最常被忽略的一环。
第一步:打开“终端” → “设置” → “通用”
第二步:在“Shell 的打开方式”中,选择“命令(完整的路径)”
第三步:在输入框中填入目标Shell完整路径,例如:/bin/zsh 或 /opt/homebrew/bin/fish
第四步:关闭设置窗口,新开一个标签页立即生效。
这个设置只作用于此后新建的所有窗口和标签页,不影响已打开的会话,也不影响SSH或login启动的Shell。
临时切换当前终端会话的Shell
适合调试配置、快速测试语法、或进入隔离环境,不改动任何系统设置:
直接输入Shell名称启动子进程:bash、fish、zsh --no-rcs
退出当前Shell回到上一层:exit 或按 Ctrl+D
确认当前所在Shell:ps -p $$(显示进程名)或 echo $0
这一步操作起来很简单,关掉窗口就自动结束,不会留下任何痕迹。











