Sublime Text需装Bash或ShellScript插件才能支持现代Bash语法;装后须重启并手动将.sh文件设为Bash语法,构建系统selector必须为"source.shell",且文件需先保存、权限正确。

Sublime Text 本身不自带可靠 Bash 支持,必须靠插件补全高亮、语法识别和构建能力;装错插件或配置错 selector,.sh 文件照样灰扑扑、Ctrl+B 没反应、数组和 [[ ]] 全标红。
哪些 Bash 插件真有用,哪些该跳过
Sublime 自带的 Shell Script 语法只认 POSIX,[[ ]]、${arr[@]}、$(( )) 都不着色,容易误判为错误。真正能用的只有两个:
-
Bash(作者 wbond,Package Control 可搜到):语法高亮准,支持现代 Bash 特性,作用域仍是source.shell,和默认构建系统兼容 -
ShellScript(也是 wbond 出品,别和上面混淆):比默认更稳,带bash -n静态检查提示,不破坏快捷键 - 别装
Bash-IDE:依赖 Python 后端,常报ImportError: No module named 'jedi';也别装Shell-Prompt:它模拟终端,不解决高亮和构建问题
为什么装了 Bash 插件,右下角还是显示 “Shell Script”
装完插件必须重启 Sublime,否则新语法不加载。重启后打开任意 .sh 文件,右下角点语言名 → 手动选 Bash(不是 Shell Script)。之后再执行:
-
View → Syntax → Open all with current extension as… → Bash,这样所有.sh文件才默认走 Bash 语法 - 别信
#!/usr/bin/env bash:Sublime 不解析 shebang,只看后缀和手动设置 - 如果右下角始终不出现
Bash选项,说明插件没装成功或没重启,重装 + 重启是唯一解
构建系统里 selector 必须写 "source.shell"
不管插件叫 Bash 还是 ShellScript,它的实际作用域(scope)在 Sublime 内部始终是 source.shell,不是 source.bash。写错就匹配不上,Ctrl+B 直接失效。
- 新建
Bash.sublime-build时,"selector": "source.shell"这行不能删、不能改 - 示例最小可用配置:
{ "shell_cmd": "bash -x \"$file\"", "working_dir": "$file_path", "selector": "source.shell" } - 如果想让非
.sh文件(比如无后缀的deploy)也能用这个构建系统,得删掉selector行,但不推荐——容易误触发
运行报 Permission denied 或输出一闪而过
这不是脚本写错了,是 Unix 权限或构建命令设计问题。
-
Permission denied:终端里跑ls -l script.sh,确认权限含x(如-rwxr-xr-x);快速修复是chmod +x script.sh,或改构建命令为bash "$file"(去掉./前缀,绕过执行位检查) - 输出一闪而过:Sublime 构建面板不保留终端状态。加
read -p "Press Enter to continue"在脚本末尾,或把构建命令改成bash -x "$file"; read - 别指望
read在构建面板里正常交互:它会卡住。真要交互调试,切终端执行更靠谱
最常被忽略的是:文件必须先 Ctrl+S 保存,未保存的缓冲区 $file 变量为空,构建直接失败;还有 macOS GUI 启动 Sublime 时 $PATH 不完整,需要显式 source ~/.bash_profile 或用绝对路径调 /bin/bash。

















