根本原因是.sh文件缺少执行权限,需先运行chmod +x your_script.sh;Sublime构建系统需手动配置ShellScript.sublime-build,使用bash -c安全调用;Windows不建议硬配,推荐WSL环境。

Sublime Text 运行 .sh 文件报错 “/bin/sh: xxx.sh: Permission denied”
根本原因不是 Sublime 配置问题,而是脚本没执行权限 —— macOS/Linux 下 sh 文件默认不可执行。Sublime 的构建系统只是调用系统 shell 去跑它,权限不满足就直接拒绝。
- 先在终端运行
chmod +x your_script.sh,给文件加执行权限 - 确认当前用户对脚本路径有读取权限(尤其路径含空格或中文时,容易静默失败)
- 别用
sh your_script.sh方式测试:这绕过权限检查,会误导你误以为“脚本本身没问题”
配置 Sublime 的 ShellScript 构建系统(macOS/Linux)
Sublime 默认没有开箱即用的 sh 构建规则,得手动加一个简单构建文件。重点是让 subl 知道该用什么命令、在哪执行、怎么传参。
- 菜单栏 → Tools → Build System → New Build System…
- 替换全部内容为以下 JSON(注意
shell_cmd里用了bash -c启动,兼容更多语法):{ "shell_cmd": "bash -c \"'$file' $file_path\"", "file_regex": "^([^:]+):([0-9]+):?([0-9]+)?:? (.*)$", "working_dir": "$file_path", "selector": "source.shell" } - 保存为
ShellScript.sublime-build(后缀必须是.sublime-build) - 之后打开
.sh文件,右下角语言模式选 ShellScript,再按Ctrl+B(Win/Linux)或Cmd+B(macOS)就能运行
Windows 上跑 .sh 文件?别硬配,换思路
Windows 原生 cmd.exe 或 PowerShell 不支持 POSIX shell 语法,强行用 git-bash 或 wsl 配构建系统,极易因路径转换、换行符、环境变量出问题。
- 如果只是临时调试,用 VS Code +
Remote - WSL插件更稳 - 非要用 Sublime,建议只在 WSL 中启动 Sublime(
code .类似逻辑,用subl .),让整个编辑+执行环境统一在 Linux 下 - 别在 Windows 主系统里配
shell_cmd指向C:\Program Files\Git\bin\bash.exe—— 路径空格、反斜杠转义、$file变量映射失败率极高
Build System 里 shell_cmd 和 cmd 的区别
很多人改构建系统时卡在这儿:shell_cmd 是走系统 shell 解析(支持管道、重定向、变量展开),cmd 是直接调用二进制,不经过 shell。
- 写
shell_cmd时,$file是 Sublime 提供的变量,会被替换成当前文件绝对路径;但如果你写成sh $file,某些系统会因路径含空格崩掉 —— 所以推荐用"bash -c \"'$file'\""这种双引号+单引号嵌套方式保路径安全 - 不要混用:比如
shell_cmd里写sh -c 'xxx'再套一层sh,容易导致信号传递异常(比如 Ctrl+C 杀不掉子进程) - 构建输出乱码?大概率是终端 locale 和 Sublime 编码不一致,优先在构建系统里加
"encoding": "utf-8",而不是改系统区域设置
Sublime 对 shell 脚本的支持本质是“借壳”,它不解析语法、不管理进程生命周期。最常被忽略的是:每次改完构建文件,得关掉所有 Sublime 窗口再重开,否则缓存可能让你白调十分钟。










