Sublime Text 不能原生运行 sh 脚本,需配置构建系统调用 sh 执行;正确写法为 ["sh", "$file"],避免权限错误和路径问题,并确保语言模式为 ShellScript、selector 匹配且重启生效。

Sublime Text 能不能直接运行 sh 脚本?
不能原生运行,得靠构建系统(Build System)把 sh 命令接进来。Sublime 本身不带终端执行能力,它只是调用系统 shell 来跑脚本——所以你本地有没有 sh、路径对不对、权限够不够,全影响结果。
怎么配一个靠谱的 ShellScript 构建系统?
别去网上抄一堆带 bash -c 套壳的配置,容易出编码或路径空格问题。最稳的是让 Sublime 直接调用 sh 执行当前文件:
- 菜单栏选 Tools → Build System → New Build System…
- 清空默认内容,粘贴以下 JSON(注意
file_path和file_name的写法):
{
"cmd": ["sh", "$file"],
"selector": "source.shell",
"file_regex": "^(...*?):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "$file_path"
}
- 保存为
ShellScript.sublime-build(路径默认是Packages/User/) - 再打开一个
.sh文件,右下角手动选中刚建的ShellScript构建系统
Permission denied 错误怎么破?
这是最常卡住人的点:Sublime 调用 sh 是“读取并执行”,不是“chmod +x 后执行”。所以即使脚本没可执行权限,sh script.sh 也能跑——但如果你的构建系统里写成 ["./$file"] 或 ["$file"],就会报 Permission denied。
- ✅ 正确:用
["sh", "$file"]—— 显式指定解释器,绕过权限检查 - ❌ 错误:用
["$file"]—— 等价于./script.sh,依赖文件 x 权限 - ⚠️ 注意:
$file包含完整路径,如果路径含空格,Sublime 会自动加引号;但老版本(如 Sublime Text 3 build 3143 之前)可能不处理,建议升级或避免空格路径
为什么改了构建系统却没反应?
常见静默失效原因就三个:
- 构建系统没被当前文件“认领”:检查右下角语言模式是不是
ShellScript(不是Bash或Plain text),且selector值匹配 - 保存了但没生效:Sublime 不自动重载
.sublime-build文件,改完要重启 Sublime 或用 Preferences → Browse Packages… 手动删掉缓存再重开 - 输出一闪而过:脚本执行完就退出,看不到结果。临时加一句
read -p "Press enter to continue..."在末尾,或者改用"cmd": ["sh", "-c", "sh '$file'; read -p 'Done. Press enter...'"]
真正麻烦的不是配构建系统,而是你写的 sh 脚本本身依赖交互式环境变量、当前终端的 PATH,或用了 Bash 特有语法却用 sh 跑——这些 Sublime 都不会帮你兜底。










