必须将.sh文件语法设为bash而非shellscript:先用package control安装bash插件(wbond版),重启后手动选bash,再通过view→syntax→open all with current extension as…绑定.sh到bash;构建需新建bash.sublime-build,内容含"shell_cmd": "bash -x \"$file\"",并确保selector为"source.shell",且保存文件后再ctrl+b执行。

Sublime Text 默认不把 .sh 文件当 Shell 脚本处理,高亮、构建、缩进全会出问题——这不是你写错了,是它根本没认对语法类型。
怎么让 .sh 文件正确高亮?
右下角状态栏显示 “Plain Text” 或 “Shell Script” 都不对,得是 “Bash” 才行。Sublime 自带的 Shell Script 语法只认 POSIX,[[ ]]、${arr[@]}、$(()) 这些全不着色,容易误判错误。
- 用
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS)调出命令面板,输入Package Control: Install Package,装Bash插件(作者 wbond,不是 Bash-IDE) - 重启 Sublime,打开任意
.sh文件,右下角点语言名 → 选Bash - 之后点
View → Syntax → Open all with current extension as… → Bash,这样所有.sh文件就默认走 Bash 语法了 - 别信 shebang:Sublime 不解析
#!/usr/bin/env bash,只看后缀和手动设置
Ctrl+B 没反应或报 No build system?
不是脚本有问题,是 Sublime 根本没绑定构建规则。它不会自动为 .sh 文件启用 Build System,哪怕你写了完美 shebang。
- 菜单栏 →
Tools → Build System → New Build System… - 粘贴以下内容并保存为
Bash.sublime-build(路径自动落在Packages/User/):
{
"shell_cmd": "bash -x \"$file\"",
"file_regex": "^([^:]+):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "$file_path",
"selector": "source.shell"
}
-
"selector": "source.shell"必须匹配当前文件语法(装完 Bash 插件后,实际作用域仍是source.shell,不是source.bash) - 保存后,按
Ctrl+Shift+P输入Build: Select Build System,选中你刚建的Bash - 务必先
Ctrl+S保存文件——未保存的临时缓冲区,$file变量为空,构建直接失败
运行报 Permission denied 怎么办?
这不是 Sublime 的 bug,是 Unix 权限机制在起作用。构建系统本质就是调 system() 执行命令,绕不过 x 位检查。
- 终端里跑
ls -l script.sh,确认权限含x(如-rwxr-xr-x) - 快速修复:
chmod +x script.sh - 或者更稳妥:改构建命令为
bash \"$file\"(不带./前缀),这样完全绕过执行权限,只依赖解释器读取权限 - 别指望
#!/bin/bash自动生效——Sublime 构建系统不读 shebang,它只按你shell_cmd里写的执行
输出一闪而过、看不到错误?
Sublime 构建面板默认不驻留,脚本一结束窗口就收起。尤其 exit 1 或语法错时,只闪一下,连哪行错都不知道。
- 关键加
-x:上面构建配置里的bash -x \"$file\"会让每条命令执行前先打印出来,相当于自动加了set -x - 如果脚本末尾没
read或sleep,加一行read -rp "Press enter to continue..."临时停住 - 重定向到文件更可靠:
shell_cmd改成bash -x \"$file\" > /tmp/shell-log 2>&1,再手动查/tmp/shell-log - 中文注释乱码?检查文件编码:菜单
File → Reopen with Encoding → UTF-8,别用 GBK
最容易被忽略的是:语法高亮和构建系统是两套独立机制,装了 Bash 插件 ≠ 能 Ctrl+B;配了 Build System ≠ 高亮正常。必须分别确认右下角显示 “Bash” 且构建系统已手动选中,缺一不可。











