sublime text在windows下无法原生运行.sh脚本,必须依赖git bash或wsl等外部环境;需显式配置shell_cmd指向git-bash.exe路径,设selector为source.shell,并用--cd和-c参数处理路径转换,否则必报bash: command not found。

Sublime Text 在 Windows 下无法原生运行 .sh 脚本——它不调用 Bash 解释器,也不解析 #!/bin/bash;所谓“运行”,本质是调用系统命令行执行文件。Windows 没有默认的 bash 命令,硬配 shell_cmd 为 bash "$file" 必然失败,报 bash: command not found 或直接静默无反应。
Windows 下必须用 WSL 或 Git Bash 作为后端解释器
Sublime 不自带 Shell,得靠外部环境。你得先确认本地有没有可用的 Bash 环境:
- 打开终端(CMD/PowerShell),运行
bash --version或git-bash --version—— 若提示“不是内部或外部命令”,说明没装或没加进PATH - 推荐安装 Git for Windows(自带
git-bash.exe),比 WSL 更轻量、路径兼容性更好 - 若用 WSL,注意 Sublime 默认启动在 Windows 用户态,
/home/xxx路径对它不可见;建议把脚本放在C:\下,再用wsl -e bash -c "cd /mnt/c/xxx && ./script.sh"方式调用
shell_cmd 必须指向真实可执行文件,且路径不能含空格或需转义
网上很多配置写 "shell_cmd": "bash \"$file\"",在 Windows 下完全无效:一是找不到 bash,二是 Windows 路径含反斜杠和空格时会崩。正确做法是显式调用 git-bash.exe 并传参:
- 先查
git-bash.exe实际路径,常见为C:\Program Files\Git\git-bash.exe或C:\Users\XXX\AppData\Local\Programs\Git\git-bash.exe - 构建配置里必须用正斜杠或双反斜杠,并包裹完整路径:
"shell_cmd": "C:/Program Files/Git/git-bash.exe --cd=\"$file_path\" -c \"bash '$file_name'\"" - 别用
cmd或PowerShell替代:它们不兼容[[ ]]、source、数组等 Bash 语法,测试通过≠真实可用
语法高亮和构建绑定必须手动设为 source.shell,不是 source.bash
即使你装了 Bash 插件(wbond 版),Sublime 的构建系统 selector 仍只认 source.shell —— 这是 Sublime 自带语法包定义的作用域名,插件不会改它。设错就匹配不上,Ctrl+B 直接失效:
- 右下角点击语言名 → 选
Shell-Unix-Generic(自带,稳定)或Bash(插件提供,高亮强),但两者底层作用域都是source.shell - 新建
Bash.sublime-build时,"selector"字段必须写"source.shell",写成"source.bash"或留空都无效 - 检查是否生效:按
Ctrl+Shift+P→ 输入Build: Select Build System,确认列表中出现你刚建的构建项,且当前文件右下角显示语言名旁有小勾(表示已绑定)
输出一闪而过?Windows 下没有 read -p 可用,得换方案
Linux/macOS 加 && read -p "..." 能暂停终端,但 git-bash.exe 启动时默认不保留窗口,read 会直接跳过。更可靠的做法是重定向日志并自动打开:
- 在
shell_cmd末尾加2>&1 | tee \"$file_path/$file_base_name.log\",把输出存到同目录日志文件 - 或者用
start notepad.exe \"$file_path/$file_base_name.log\"自动弹记事本(需确保路径无空格,否则加引号并转义) - 避免用
cmd /c pause:它只停 CMD 窗口,不捕获 Bash 脚本的 stderr,错误照样看不见
最常被忽略的一点:Windows 路径里的盘符(C:)在 Git Bash 里要转成 /c/,但 Sublime 的 $file 变量返回的是 Windows 格式绝对路径,git-bash.exe 无法直接识别。所以不要指望 bash "$file" 在 Windows 下能跑通——必须通过 --cd 和 -c 组合,让 Git Bash 自己做路径转换。











