Sublime Text 默认不支持直接运行 Shell 脚本,需手动配置 Build System:新建 .sublime-build 文件,设 shell_cmd 为 sh "$file"、working_dir 为 $file_path、selector 为 source.shell,并确保脚本有可执行权限(chmod +x)且语法高亮正确。

Sublime Text 里怎么直接运行 Shell 脚本
能,但默认不支持「一键保存并执行」,必须手动配置 Build System。Sublime 本身不带 Shell 解释器调用逻辑,它只是把当前文件路径交给系统命令去跑,所以关键在 build 文件的写法和执行权限。
- 脚本文件需有可执行权限:
chmod +x ./script.sh,否则./script.sh会报Permission denied - 推荐用
sh显式调用(兼容性更好):比如sh "$file",避免因 shebang 缺失或环境变量差异导致失败 - 如果脚本依赖当前工作目录(比如读取同级 config.json),build 命令里要加
-d "$file_path"指定工作路径,否则默认在 Sublime 安装目录下执行
怎么创建一个可用的 Shell Build System
路径是 Tools → Build System → New Build System…,粘贴以下内容后保存为 Shell.sublime-build(文件名决定菜单显示名):
{
"shell_cmd": "sh \"$file\"",
"working_dir": "$file_path",
"selector": "source.shell",
"file_regex": "^(...*?):([0-9]+):?([0-9]+)?:? (.*)$",
"variants":
[
{
"name": "Run in Terminal",
"shell_cmd": "gnome-terminal -- bash -c \"sh '$file'; read -p 'Press Enter to exit...'\""
}
]
}
说明:
-
"shell_cmd"用双引号包裹、$file加转义,防止路径含空格时报错 -
"working_dir"确保脚本内相对路径(如./data.txt)能正确解析 - Linux 下若用
gnome-terminal,终端会停留;KDE 用户换konsole -e,macOS 换osascript -e 'do shell script ...' -
selector设为source.shell后,.sh 文件自动匹配该 build 系统(前提是已安装 ShellScript 语法高亮包)
为什么 Ctrl+B 执行后没反应或报错 sh: command not found
常见不是 Sublime 的问题,而是 shell 环境隔离导致的 —— Sublime 启动时没加载你的 ~/.bashrc 或 ~/.zshrc,PATH 里没有自定义命令路径。
- 检查终端里能跑通的命令(如
mytool --version),在 Sublime build 中直接写全路径:/home/user/bin/mytool "$file" - Mac 上尤其明显:GUI 应用默认用
/bin/sh,不读 shell 配置文件;可在 build 里改用bash -l -c "mytool \"$file\""(-l表示 login shell) - Windows WSL 用户注意:Sublime 运行在 Windows,build 调用的是 Windows 的
sh(比如 Git for Windows 提供的),不是 WSL 的bash;如需 WSL,得用wsl -e bash -c "sh /mnt/c/...
想看实时输出、支持交互输入怎么办
Sublime 原生 build 面板是只读的,不支持 read 或 select 等交互式操作,输入会被忽略。
- 临时方案:用
variant开新终端(如上例中Run in Terminal),适合调试需要人工输入的场景 - 长期建议:把交互逻辑拆到单独脚本里,主脚本只做数据准备,用
echo输出提示,再由终端处理输入 - 别指望 build 面板支持 ANSI 颜色或清屏 —— 它本质是文本流 dump,复杂终端行为一律失效
真正卡住的地方往往不是配置语法,而是工作目录、权限、shell 初始化这三块。先确认 sh "$file" 在终端里能跑通,再挪进 Sublime,顺序错了就容易反复试错。











