Sublime Text如何实现一键运行Shell脚本?Linux运维助手

P粉328763957

P粉328763957

2026-07-04

711人浏览

原创

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

sublime text如何实现一键运行shell脚本?linux运维助手

为什么直接按 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版
PyCharm 2026.2.0.1 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} 在空文件或未保存文件时为空,会导致工作目录异常——务必先保存再运行。

相关专题

更多
li是什么元素
li是什么元素

li是HTML标记语言中的一个元素,用于创建列表。li代表列表项,它是ul或ol的子元素,li标签的作用是定义列表中的每个项目。本专题为大家li元素相关的各种文章、以及下载和课程。

2023.08.03

596

5

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

2672

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

1649

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

1297

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

2674

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

2421

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

1660

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

1254

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

1423

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程