sublime text 默认不识别 .sh 文件,ctrl+b 无反应或报错是因为未配置构建系统;需手动创建含 "shell_cmd": "bash \"${file}\""、"selector": "source.shell" 的 json 构建规则,并保存文件、设语法为 bash、手动选中该构建系统。

为什么直接按 Ctrl+B 不能运行 .sh 文件?
Sublime Text 默认的 Build System 不识别 .sh 后缀,它只会把当前文件交给默认构建器(通常是 Python 或空配置),所以你按 Ctrl+B 后要么没反应,要么报错 Unable to find a build system 或执行了错误解释器。
真正要做的,是手动绑定一个能调用 bash 并传入当前文件路径的构建规则。
- 打开
Tools → Build System → New Build System… - 清空模板内容,粘贴以下 JSON(注意保存时选
JSON语法高亮):
{
"shell_cmd": "bash \"${file}\"",
"file_regex": "^(...*?):([0-9]*):?([0-9]*)",
"working_dir": "${file_path}",
"selector": "source.shell"
}
selector 是关键:它让 Sublime 只在 .sh 文件中激活该构建系统;shell_cmd 中的 ${file} 会自动展开为完整路径,双引号防止含空格路径出错。
如何让 Shell 脚本支持交互式输入(比如 read)?
默认构建系统运行在 Sublime 内置的非交互式终端里,read 会立即失败或卡住——这不是脚本问题,是 Sublime 的限制。
解决办法只有两个,且必须二选一:
- 改用外部终端:把
shell_cmd换成gnome-terminal -- bash -c "bash '${file}'; read -p 'Press Enter to exit...' "(GNOME 环境);KDE 用户换konsole -e bash -c "...";macOS 可用osascript -e 'do shell script "open -a Terminal.app ..."' - 放弃交互,改用参数注入:脚本开头加
[[ -z "$1" ]] && { echo "Usage: $0 <input>"; exit 1; },构建命令改为bash "${file}" "your_input"
别试图用 subl --command 或插件绕过这个限制——Sublime 的 API 不暴露 stdin/stdout 控制权。
怎样避免权限不足导致“Permission denied”?
即使脚本语法正确,bash "${file}" 仍可能报错:/bin/bash: /path/to/script.sh: Permission denied。这不是 Sublime 的错,是 Linux 文件权限机制在起作用。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
有三种处理方式,按推荐顺序排列:
- 最安全:每次运行前执行
chmod +x "${file}"—— 可以写进构建系统,但需拆成两步(Sublime 不支持多行 shell_cmd);更稳妥的做法是加个快捷键绑定ctrl+alt+x执行chmod +x $FILE(需安装ShellCommand插件) - 偷懒但有效:直接用
bash显式解释,不依赖可执行位 —— 构建命令保持bash "${file}"即可,这是推荐做法 - 危险操作:全局
chmod +x *.sh—— 容易误伤配置文件或下载的不可信脚本,不建议
记住:只要构建命令是 bash xxx.sh 形式,就完全不需要 +x 权限;只有 ./xxx.sh 这种写法才强制要求可执行位。
能不能同时支持 Bash 和 Zsh?
可以,但没必要为切换 shell 大动干戈。多数运维场景下,bash 兼容性最好,zsh 的扩展语法(如 ** glob)在脚本中未必被所有环境支持。
如果真需要 zsh,只需把构建系统的 shell_cmd 改成:
"shell_cmd": "zsh \"${file}\""
但要注意两点:
-
zsh在部分最小化发行版(如 Alpine)中默认未安装,zsh: command not found会静默失败 -
#!/usr/bin/env zsh声明不会被构建系统读取——Sublime 不解析 shebang,它只认你写死的shell_cmd
真正影响脚本行为的是解释器本身,不是 shebang 行;所以别指望靠改第一行来切换执行环境。
真正容易被忽略的点:构建系统保存后,必须手动在 Tools → Build System 中选中你新建的那个(比如命名为 Shell),否则 Ctrl+B 依然走默认路径。另外,${file_path} 在空文件或未保存文件时为空,会导致工作目录异常——务必先保存再运行。










