sublime text 不能直接执行.sh文件,必须配置构建系统调用系统bash/sh;需安装wbond版bash插件并绑定.sh到bash语法,新建bash.sublime-build指定"shell_cmd": "bash -x \"$file\"", selector为"source.shell",且脚本须保存、有执行权限、shebang设为#!/usr/bin/env bash。

Sublime Text 不能直接“执行”.sh文件——它没有内置 Shell 解释器,所有所谓“运行”都是靠构建系统(Build System)调用系统 bash 或 sh 命令来完成的。配置失败的绝大多数情况,不是脚本写错了,而是语法没认对、构建没绑上、权限没加上、路径没转义。
为什么右下角显示“Shell Script”却高亮错乱?
Sublime 自带的 Shell Script 语法只支持 POSIX shell,不识别 [[ ]]、${arr[@]}、$(()) 等 Bash 特有语法,结果就是关键字不着色、括号不配对、容易误判错误。
- 必须装
Bash插件(作者 wbond,不是 Bash-IDE),重启后手动将当前.sh文件语法设为Bash - 再通过
View → Syntax → Open all with current extension as… → Bash,把所有.sh文件默认绑定到Bash语法 - 别信
#!/usr/bin/env bash:Sublime 不解析 shebang,只看后缀和手动设置
Ctrl+B 没反应或报 “No build system”?
这不是 Sublime 忘了你写的是脚本,是它根本没加载任何针对 source.shell 的构建规则。默认不带 Shell 构建系统,必须手建。
- 菜单栏 →
Tools → Build System → New Build System… - 粘贴并保存为
Bash.sublime-build(路径自动落在Packages/User/):
{
"shell_cmd": "bash -x \"$file\"",
"file_regex": "^([^:]+):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "$file_path",
"selector": "source.shell"
}
-
"selector": "source.shell"是关键:装完 Bash 插件后,作用域仍是source.shell,不是source.bash - 保存后再按
Ctrl+B—— 未保存的临时缓冲区里$file为空,构建必然失败
运行报 “Permission denied” 或 “bad interpreter”?
这两个错误都跟系统层权限和解释器路径有关,和 Sublime 配置关系不大。
-
Permission denied:脚本没x权限。终端里跑ls -l script.sh,确认有-rwxr-xr-x;快速修复:chmod +x script.sh,或改构建命令为bash "$file"(绕过执行权限检查) -
bad interpreter: No such file or directory:shebang 写死了路径,比如#!/usr/local/bin/bash,但系统里实际是/bin/bash或/usr/bin/bash。统一改成#!/usr/bin/env bash - Windows 用户别硬配 Git Bash 路径:
C:\Program Files\Git\bin\bash.exe含空格+反斜杠,$file变量映射极易失败;推荐 WSL 环境下启动 Sublime
输出一闪而过,看不到错误信息?
Sublime 构建面板默认不保留终端状态,脚本一结束就清屏。这不是 bug,是设计如此。
- 在脚本末尾加
read -p "Press enter to continue..."可暂停 - 或者重定向输出:
"shell_cmd": "bash -x \"$file\" > /tmp/build.log 2>&1",再手动查日志 - 更稳妥的做法是:用
bash -c "cd '$file_path' && bash '$file_name'"这种结构,确保工作目录正确,避免./lib.sh找不到的问题
真正容易被忽略的点是:构建系统是否匹配当前文件的实际作用域(source.shell)、$file 是否已展开为绝对路径、以及 working_dir 是否设对——这三个条件缺一不可,否则哪怕语法全对,也会静默失败或路径错误。











