Mac终端默认Shell需同步修改登录Shell、终端App新建窗口Shell和当前会话Shell三层:用chsh改登录Shell并重启生效;在终端设置中手动指定新窗口Shell路径;当前会话可临时输入shell名切换。

Mac修改终端默认Shell环境必须同时处理三个独立层面:登录时启动的Shell、终端App新建窗口实际运行的Shell、以及当前会话中临时切换的Shell——改错一个,其他两个仍保持原样,终端行为就会不一致。
确认当前默认Shell和可用Shell列表
先打开终端,执行:
echo $SHELL
这显示的是系统为你账户设定的默认登录Shell路径,不是你此刻正在用的Shell。
再运行:
cat /etc/shells
只有这里列出的路径才被系统允许设为默认Shell。如果想切bash但没看到/bin/bash,说明它未被启用,不能直接chsh。
检查当前会话真正跑的是哪个Shell:
ps -p $$
输出里COMMAND列就是当前进程名,比如zsh、bash或fish——这个才是你现在敲命令时实际解析的Shell。
修改用户登录时启动的默认Shell
这是影响图形界面登录、SSH登录、以及所有新登录会话的根本设置,必须用chsh命令:
切换为zsh(推荐):
chsh -s /bin/zsh
切换为bash(需确保/bin/bash已在/etc/shells中):
chsh -s /bin/bash
【修改后必须完全退出当前图形会话:登出系统再重新登录,或重启Mac,仅关闭终端窗口/标签页无效】
输入命令后会提示输入当前用户密码,输完即完成注册。下次登录时才会生效。
统一终端App新建窗口使用的Shell
即使$SHELL已改成zsh,macOS终端App默认可能仍按旧设置启动新窗口——它根本不读$SHELL,只认“设置 > 通用”里的配置。
打开“终端” → “设置” → “通用”
在“Shell 的打开方式”中,选择“命令(完整的路径)”
在右侧输入框填入你希望每个新窗口都运行的Shell路径,例如:
/bin/zsh 或 /opt/homebrew/bin/fish
这个设置只对新建窗口和新标签页起作用,已打开的会话不受影响,也不改变SSH或login启动的行为。
临时切换当前终端会话的Shell
方法一:直接输入Shell名称启动子Shell
比如当前是zsh,想临时进bash调试,就敲:
bash
方法二:跳过配置文件快速进入干净环境
zsh --no-rcs 或 bash --norc
这样不会加载~/.zshrc或~/.bash_profile,适合排查配置冲突。
退出当前Shell回到上一层:
exit 或 Ctrl+D
注意:这种切换只存在于当前窗口生命周期内,关闭窗口即消失,不改动任何配置文件或系统设置。
为不同描述文件绑定专属Shell
第一步:打开“终端” → “设置” → “描述文件”
第二步:选中你要定制的描述文件(比如“开发”、“运维”、“测试”)
第三步:点击左侧栏的“Shell”选项卡
勾选“启动时运行命令”,填入:
source ~/.dev-env.sh && cd ~/myproject
“Shell 退出时窗口的行为”可设为“不关闭窗口”,方便查看最后输出结果
这些设置只对该描述文件新建的窗口生效,与其他描述文件完全隔离,互不影响。

















