Sublime Text在Windows下必须显式调用Git Bash的git-bash.exe路径,不能写bash "$file",因Windows原生无bash命令,PATH未配置时必报“command not found”或静默失败。

Sublime Text 在 Windows 下运行 .sh 脚本,必须显式调用 Git Bash(或 WSL)的可执行文件,不能写 bash "$file" —— 否则 100% 报 bash: command not found 或静默失败。
为什么直接配 bash 必然失败
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 下最稳妥的选择。
通过 SSH 隧道从 Android 设备在互联网上对 Windows PC 实现完整远程控制的设置与使用指南,适用于远程桌面访问、安全 RDP 等。
- 先确认
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插件) - 确保该语法对应的作用域是
source.shell:可通过Ctrl+Shift+P → Developer: Show Scope Name验证光标处是否含source.shell - 想让所有 .sh 文件默认用此语法:菜单
View → Syntax → Open all with current extension as… → Shell-Unix-Generic - 未保存的临时文件(无磁盘路径)会导致
$file为空,构建直接跳过,毫无提示 —— 务必先保存再按 Ctrl+B
输出一闪而过?交互式脚本卡住?
Sublime 构建面板默认不保留终端状态,且不支持 stdin 输入流,这是最容易被忽略的限制点。
- 脚本末尾加
&& read -p "Press Enter to exit"可暂停输出(仅限 Git Bash 支持) - 需要真正交互(如
read name、select)?别用构建系统 —— 换Terminus插件,或直接在 Git Bash 终端里跑 - 错误信息看不到?把构建命令改成:
"shell_cmd": "C:/Program Files/Git/git-bash.exe --cd=\"$file_path\" -c \"bash '$file_name' 2>&1 | tee /tmp/sublime-run.log\"",再查日志 - 别用
osascript或gnome-terminal类方案:它们新开窗口,脱离 Sublime 构建上下文,拿不到$?和标准错误流
真正卡住的地方从来不是语法或插件,而是 git-bash.exe 路径写错、selector 拼错、或者忘了保存文件 —— 这三处出错,Ctrl+B 就是静默失效,连错误提示都不会给。

















