Sublime Text 本身不执行 Shell 脚本,仅调用系统 bash/sh 运行;Ctrl+B 失败根因必为三点:语法未设为 Bash(须手动选“Bash”并绑定.sh)、构建系统配置错误(如 selector 写成 source.bash 而非 source.shell)、文件未保存或权限不足(无 x 位时应改用 bash "$file" 而非 ./$file)。

Sublime Text 本身不执行 Shell 脚本,它只调用系统 bash 或 sh 去运行;Ctrl+B 失败的根因永远是这三点:语法没设成 Bash、构建命令写错、文件没保存或权限不对——不是 Sublime 不行,是你配漏了某个环节。
为什么 Ctrl+B 没反应或报 “No build system”
Sublime 完全忽略 #!/usr/bin/env bash,只靠右下角显示的语言类型和 selector 匹配构建系统。显示 “Plain Text” 或 “Shell Script” 都不会触发 Shell 构建规则。
- 必须装
wbond的 Bash 插件(别装 Bash-IDE),重启后手动点右下角 → 选Bash - 再点
View → Syntax → Open all with current extension as… → Bash,让所有.sh文件默认走 Bash 语法 - 未保存的文件会导致
$file变为空字符串,构建静默跳过——务必先按Cmd+S(macOS)或Ctrl+S(Windows/Linux)
怎么写一个真正能跑的 Bash.sublime-build
网上很多配置漏引号、混用 cmd 和 shell_cmd、硬写 sh -c "bash $file",结果路径带空格就崩,或 ./config.json 找不到。
- 用
shell_cmd(支持 shell 变量和重定向),别用cmd(要自己转义空格) -
"shell_cmd": "bash -x \"$file\"":双引号防路径含空格,-x开启调试输出,方便查哪一行卡住 -
"working_dir": "$file_path":确保脚本里./lib.sh这类相对路径能正确解析 -
"selector": "source.shell":Bash 插件实际仍用source.shell作用域,不是source.bash - 保存为
Packages/User/Bash.sublime-build,然后Cmd+Shift+P→Build: Select Build System选它
“Permission denied” 是 Unix 权限在起作用,不是 Sublime 的 bug
报这个错,说明构建系统正尝试用 ./$file 方式执行——但 macOS/Linux 下 .sh 文件默认无执行位,chmod +x 才能过。
- 终端运行
ls -l script.sh,看到-rwxr-xr-x才对;没x就补chmod +x script.sh - 更稳妥的做法是绕过权限检查:
"shell_cmd": "bash \"$file\""(不带./),只要文件可读就能跑 - 别用
sh "$file"测试逻辑——sh不支持[[ ]]、数组、source等 Bash 特性,会掩盖真实错误 - Windows 用户原生不认
#!/bin/bash,硬配必失败;如需运行,请走 WSL 并配对应shell_cmd,别碰cmd或powershell
最常被忽略的是:构建系统是否真的被当前文件匹配到——哪怕配置全对,如果右下角语言类型没切到 Bash,或者 selector 写成 source.bash(而插件实际发的是 source.shell),整个链路就断了。


















