Sublime Text需通过Terminus插件指定Bash为默认Shell:在用户设置中配置shell_configs,写明["bash", "-i"]及完整路径(如非标准位置),并确保相关配置位于~/.bashrc中;构建系统不支持交互式Bash会话。

Sublime Text 里没有“把终端设成 Bash”这回事
Sublime Text 本身不带终端,所谓“终端”要么是系统原生终端(靠 open -a Terminal 或 gnome-terminal 启动),要么是插件模拟的(如 Terminus)。你真正要配的,是「用哪个 shell 启动终端」——Bash 只是其中一个可选解释器,不是默认或唯一选项。
用 Terminus 插件时如何指定 Bash 为默认 Shell
Terminus 是目前最稳定、跨平台的终端嵌入方案。它不依赖系统 Terminal.app 或 gnome-terminal,而是在 Sublime 窗口内启动一个真正的伪终端进程,所以能直接控制用什么 shell 启动。
- 安装 Terminus 后,打开
Preferences → Package Settings → Terminus → Settings - 在用户设置中添加或修改:
{ "shell_configs": [ { "name": "Bash", "cmd": ["bash", "-i"], "env": {} } ], "default_config": "Bash" } -
cmd必须写成数组形式;-i表示交互模式,缺了就一闪退出 - macOS 上如果 Bash 不在
/bin/bash(比如用 Homebrew 装的/opt/homebrew/bin/bash),得把路径写全 - 改完保存,重启 Sublime 或执行
Terminus: Restart Kernel命令才生效
为什么改了 ~/.bash_profile 或 ~/.zshrc 没用
Terminus 启动时默认不读取你的 shell 配置文件(除非显式加 --rcfile),它只调用 bash -i,走的是 Bash 自身的初始化逻辑:非登录 shell 不 source ~/.bashrc,登录 shell 才读 ~/.bash_profile。但 Terminus 启动的是非登录交互式 shell,所以只认 ~/.bashrc。
- 确保你要加载的 alias / PATH / 函数都放在
~/.bashrc里 - 如果习惯用
~/.bash_profile,在末尾加一句:[[ -f ~/.bashrc ]] && source ~/.bashrc - 别指望
export SHELL=/bin/bash能影响 Terminus —— 它根本不查这个环境变量
不装插件,只靠构建系统“假装”进 Bash?
有些教程教你在 .sublime-build 里写 "shell_cmd": "bash -i",这是无效的。构建系统设计用来跑一次性命令,不是维持交互会话。bash -i 会立即等待 stdin,但 Sublime 的构建输出管道不支持交互输入,结果就是卡住、无响应、或直接退出。
- 构建系统适合:
bash "$file"(执行脚本)、ls -la(查目录)这类有始有终的命令 - 需要交互?必须用 Terminus 或外部终端(比如配置
"shell_cmd": "open -a Terminal.app '$file_path'") - 试图用
bash -c "exec bash"绕过?只会新开一个无关联的子 shell,和 Sublime 完全脱节
shell_configs 是唯一可控、可调试、能持久生效的方式。其他所有“改终端默认 shell”的尝试,本质都是在绕开插件机制硬凑,最终卡在权限、PATH、shell 初始化顺序这些细节上。


















