windows下sublime text运行.sh脚本必须显式调用git-bash.exe,因系统原生无bash命令,cmd/powershell不识别#!/bin/bash及bash语法,且构建系统仅拼字符串执行、不自动解析shebang或查找解释器。

Windows 下 Sublime Text 要跑 .sh 脚本,必须显式调用 Git Bash 的 git-bash.exe,不能写 bash "$file" —— 否则 100% 报 bash: command not found 或静默失败。
为什么直接配 bash "$file" 必然失败
Windows 原生没有 bash 命令,cmd.exe 和 powershell.exe 都不识别 #!/bin/bash,也不支持 [[ ]]、source、数组等语法。Sublime 的构建系统只是拼字符串丢给系统执行,它不会帮你找解释器,也不会降级兼容。
- 在 CMD 中运行
bash --version报“不是内部或外部命令” → 说明 Git Bash 没装或没进 PATH - 网上常见配置
"shell_cmd": "bash \"$file\""在 Windows 下完全无效:既找不到bash,又无法处理路径中的反斜杠和空格 - 即使你装了 WSL,Sublime 运行在 Windows 用户态,
/home/xxx路径对它不可见;直接写wsl -e bash -c "cd /home/xxx && ./a.sh"会因路径映射失败而报错
正确配置 Git Bash 构建系统(推荐)
Git for Windows 自带 git-bash.exe,路径稳定、启动快、路径转换兼容性好,是 Windows 下最稳妥的选择。
- 先确认
git-bash.exe实际位置:常见为C:/Program Files/Git/git-bash.exe或C:/Users/XXX/AppData/Local/Programs/Git/git-bash.exe(注意用正斜杠或双反斜杠) - 菜单栏 → Tools → Build System → New Build System…,粘贴以下内容并保存为
ShellScript.sublime-build:
{
"shell_cmd": "C:/Program Files/Git/git-bash.exe --cd=\"$file_path\" -c \"bash '$file_name'\"",
"selector": "source.shell",
"working_dir": "$file_path",
"encoding": "utf-8"
}
-
--cd=\"$file_path\"让 Git Bash 启动时自动切换到脚本所在目录,避免./lib.sh: No such file -
-c \"bash '$file_name'\"在当前目录下执行脚本,不依赖执行权限(跳过chmod +x步骤) -
"selector": "source.shell"是硬性要求:写成source.bash或留空,Ctrl+B就不触发
语法高亮与文件绑定必须手动设为 source.shell
Sublime 不会根据 #!/usr/bin/env bash 自动识别语言类型,右下角显示 “Plain Text” 或“Bash” 都可能匹配失败。
- 打开
.sh文件 → 点击右下角语言名 → 选Shell-Unix-Generic(Sublime 自带,稳定)或Bash(需安装ShellScriptImproved插件) - 即使你装了 Bash 插件(wbond 版),Sublime 的构建系统
selector仍只认source.shell—— 这是 Sublime 自带语法包定义的作用域名,插件不会改它 - 设错就匹配不上,
Ctrl+B直接失效
输出一闪而过或看不到错误信息
Sublime 构建面板默认不保留终端状态,尤其脚本末尾没 read 或没触发错误时,输出直接消失。
- 在
shell_cmd末尾加&& read -p "Press Enter to exit"(仅限 Git Bash 支持)让终端停留 - 或者重定向输出:
"shell_cmd": "C:/Program Files/Git/git-bash.exe --cd=\"$file_path\" -c \"bash '$file_name' > /tmp/sublime-run.log 2>&1\"",再手动查日志 - 避免用
gnome-terminal -- bash -c ""类方案:它新开窗口,和构建面板脱节,无法捕获$?或标准错误流
最容易被忽略的是:未保存的文件,$file 变量为空,shell_cmd 会执行失败;还有路径含中文或空格时,Git Bash 对双引号转义很敏感,建议统一用正斜杠、避免空格路径。











