Sublime Text 运行 .sh 文件报错“/bin/bash: bad interpreter”是因为脚本首行硬编码的解释器路径不存在,应改为 #!/usr/bin/env bash;需手动配置 Shell.sublime-build 构建系统并设置语法为 Shell-Unix-Generic,且脚本须有可执行权限,交互式命令需在终端或 Terminus 插件中运行。

Sublime Text 运行 .sh 文件报错 “/bin/bash: bad interpreter: No such file or directory”
这是 macOS 或 Linux 用户在 Sublime 中直接运行 Shell 脚本时最常遇到的错误,根本原因是脚本首行的 #! 解释器路径写死了(比如 #!/usr/local/bin/bash),而系统实际没装或路径不对。Sublime 的构建系统不会自动帮你找 bash,它只忠实地执行你写的 #! 行。
实操建议:
- 用
which bash查你当前终端用的 bash 路径,常见是/bin/bash或/usr/bin/env bash - 把脚本第一行改成
#!/usr/bin/env bash——它比硬编码路径更健壮,能跨环境 - 保存后,在 Sublime 里按
Ctrl+B(Windows/Linux)或Cmd+B(macOS)运行,前提是已配置好构建系统(见下一条)
配置 Sublime 的 Shell 构建系统:让 Ctrl+B 真正跑起 .sh
Sublime 默认没有 Shell 构建规则,Ctrl+B 对 .sh 文件无效,不是 bug,是没配。必须手动加一个 Shell.sublime-build 文件。
实操建议:
- 菜单栏点 Tools → Build System → New Build System…,粘贴以下内容并保存为
Shell.sublime-build - 文件路径必须是 Sublime 的 Packages/User 目录(可通过 Preferences → Browse Packages… 打开)
- 内容示例(兼容 macOS/Linux,不依赖 Windows 的
bash.exe):
{
"shell_cmd": "bash \"${file}\"",
"file_regex": "^(...*?):([0-9]*):?([0-9]*)",
"selector": "source.shell"
}
注意:"selector": "source.shell" 让它自动匹配 .sh 文件;如果想对所有文件都生效,可删掉这行,但不推荐——容易误触发。
为什么改了构建系统,Ctrl+B 还是没反应?
常见现象是保存了 Shell.sublime-build,也选中了对应构建系统,但按 Ctrl+B 没输出、没报错、也没执行。大概率是文件没被识别为 Shell 语法,导致构建系统不激活。
实操建议:
- 打开你的
.sh文件,看右下角状态栏显示的语法名称,如果不是Shell-Unix-Generic或Shell Script,就手动点它 → 选 Open all with current extension as… → Shell-Unix-Generic - 或者,给该文件扩展名加语法绑定:菜单 View → Syntax → Open all with current extension as… → Shell-Unix-Generic
- 检查文件权限:Sublime 不能绕过系统限制,
bash要求脚本有可执行权限,终端里先运行chmod +x your_script.sh
在 Sublime 里调试 Shell 脚本,为什么看不到 read 输入或交互?
Sublime 的构建系统本质是调用命令行执行脚本,但它不提供伪终端(PTY),所以像 read -p "input: " var 这类需要用户输入的语句会卡住,或直接跳过——这不是 Sublime 的缺陷,是所有非终端构建环境的共性。
实操建议:
- 交互式操作一律回到终端:用
cd /path/to && ./script.sh - 若只是临时测试变量逻辑,把
read替换为硬编码,比如var="test" - 不想切窗口?安装插件
Terminus(需 Package Control),它能内嵌真正终端,支持完整交互
真正麻烦的从来不是怎么配,而是忘了 Sublime 构建系统不是终端——它不继承你的 shell 配置(比如 ~/.zshrc 里的 alias 或 PATH),也不处理 stdin/stdout 的交互流。这点,配得再熟也绕不开。









