sublime text 需手动配置构建系统才能运行 .sh 文件:选对 build system、设语法为 bash、保存文件;wsl 用户须自定义构建系统指向 bash;权限不足需 chmod +x 或改用 bash '$file_name';输出一闪而过可加 read 或重定向至日志。

Sublime Text 默认不支持一键运行 .sh 文件,必须手动配置构建系统(Build System),否则 Ctrl+B 要么没反应、要么执行失败、要么输出一闪而过——这不是脚本问题,是 Sublime 没“认出”你要跑的是 Shell。
为什么 Ctrl+B 没反应?检查这三件事
常见错误现象:按下 Ctrl+B 后底部面板空白、无任何输出、甚至弹出 “No build system” 提示。
- 构建系统未选中:右下角状态栏查看当前 Build System 是否为
Shell-Unix(Linux/macOS)或你自定义的 Shell 构建项;Tools → Build System里不能是Automatic - 文件语法未设为 Bash:右下角点击当前语法(如 “Plain Text”),手动选
ShellScript → Bash;否则 Sublime 不会触发 Shell 构建规则 - 文件未保存:
$file_path和$file_name变量依赖已保存路径,临时未保存文件无法被构建系统定位
Windows WSL 用户必改:默认 Shell-Unix 构建系统会失败
Sublime 自带的 Shell-Unix 构建系统硬编码调用 /bin/sh,但在 WSL 中实际 shell 往往是 /usr/bin/bash,且需要交互式模式才能正确加载环境变量和别名。
实操建议:新建构建系统(Tools → Build System → New Build System…),替换为以下内容:
{
"shell_cmd": "bash -c \"cd '$file_path' && bash '$file_name'\"",
"file_regex": "^([^:]+):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "$file_path",
"selector": "source.shell"
}
-
shell_cmd中双引号必须转义,否则 JSON 解析失败 -
$file_path和$file_name是 Sublime 内置变量,不能写成${file_path} -
selector必须匹配当前文件语法(source.shell对应 Bash 语法)
Permission denied 错误:不是脚本写错了,是权限没给
报错信息:bash: ./script.sh: Permission denied。Sublime 构建系统本质是调用系统 shell 执行命令,不绕过 Unix 权限检查。
- 终端中运行
ls -l script.sh,确认输出含-rwxr-xr-x(至少有u+x) - 快速修复:
chmod +x script.sh - 不想改权限?把构建命令改成
bash '$file_name'(去掉./前缀),直接调用解释器读取执行 - 别指望
#!/bin/bash自动生效:Sublime 不解析 shebang,只按构建系统指定方式调用解释器
输出一闪而过?加 read 或重定向日志
Sublime 构建面板默认不保留终端状态,脚本执行完就关闭输出,尤其当末尾没暂停命令时,错误信息根本来不及看。
- 最简单办法:在脚本末尾加一行
read -p "Press any key to continue..." - 更可靠做法:把构建命令改为
bash -c "cd '$file_path' && bash '$file_name' 2>&1 | tee build.log",错误和输出都存到build.log - 或者换用
Terminus插件:配置一个调用terminus_exec的构建系统,输出始终保留在终端面板中,支持滚动、复制、重连
真正容易被忽略的是:构建系统里的 selector 和编辑器右下角显示的语法类型必须严格一致;差一个字符(比如 source.shell vs source.bash),整个构建流程就静默失效。











