Sublime中Ctrl+B报“command not found: ruby”是因GUI启动未继承shell环境变量;应先在控制台运行import os; print(os.environ.get('PATH'))验证PATH缺失,再通过zsh -l -c(macOS/Linux)或写死ruby.exe绝对路径(Windows)配置Build System,并确保保存文件后再构建。

ruby 命令在终端能跑,但在 Sublime 里按 Ctrl+B 就报 command not found: ruby —— 这不是 Ruby 没装好,而是 Sublime GUI 启动时压根没读你的 ~/.zshrc 或系统 PATH。核心问题就一个:环境变量没继承。
Sublime 控制台里看 PATH 是不是真缺 ruby
先别急着改配置,打开 Sublime 的控制台(View → Show Console),输入:
import os; print(os.environ.get('PATH'))
检查输出里有没有你的 Ruby 路径,比如:
- macOS Apple Silicon:
/opt/homebrew/bin或/Users/xxx/.rbenv/shims - macOS Intel:
/usr/local/bin - Windows:
C:Ruby32-x64in(注意是反斜杠,且必须是「系统变量」里的 PATH)
如果没出现,说明 Sublime 确实找不到 ruby,接下来才需要配构建系统。
macOS/Linux 推荐用 login shell 加载环境(兼容 rbenv/rvm)
直接写死路径会锁死 Ruby 版本;裸写 "shell_cmd": "ruby $file" 又依赖残缺的 PATH。最稳的做法是让 Sublime 启动一个登录态 shell,自动加载你的 ~/.zshrc。
新建构建系统(Tools → Build System → New Build System…),粘贴:
{
"shell_cmd": "zsh -l -c "ruby '$file'"",
"file_regex": "^(*?):([0-9]*):?([0-9]*)",
"selector": "source.ruby",
"encoding": "utf-8"
}
注意几点:
-
zsh -l -c中的-l表示登录态,会 source~/.zshrc;Catalina 及之后 macOS 默认用 zsh,别写成bash - 双引号和单引号嵌套要严格匹配,否则含空格路径会崩
-
file_regex必须加,不然错误行号点不了,定位不到哪行出错
Windows 必须写死 ruby.exe 绝对路径
Windows 不支持 zsh -l -c 这类 shell 加载方式,只能显式指定可执行文件。打开资源管理器,找到你 Ruby 安装目录下的 ruby.exe(例如 C:Ruby32-x64in
uby.exe),右键属性复制「位置」,然后配构建系统:
{
"cmd": ["C:\Ruby32-x64\bin\ruby.exe", "$file"],
"file_regex": "^(*?):([0-9]*):?([0-9]*)",
"selector": "source.ruby",
"encoding": "utf-8"
}
关键细节:
- 路径中所有反斜杠必须是双写
\,否则 JSON 解析失败 - 路径不能含空格(如
C:Program Files)——这类路径会静默失败,换到C:Ruby32-x64这类无空格路径重装 Ruby 更省事 - 确认该路径已加进「系统环境变量」PATH,而非仅「用户变量」;改完需重启 Sublime
为什么 $file 总是跑旧代码?
Sublime 的构建系统默认不保存当前文件。你改了 10 行,但没按 Ctrl+S,Ctrl+B 执行的仍是磁盘上未保存的旧版本。
没有内置开关开启“保存后构建”,但可以装插件解决:
- 通过 Package Control 安装
SaveOnBuild - 装完即生效,无需额外配置
- 注意:它只保存当前文件,不保存整个项目或未修改的标签页
另外,file_regex 字段容易被忽略,但它决定了错误信息能否点击跳转——漏掉它,报错就只能手动翻行号。

















