修复 Hexo bad interpreter 错误
环境:macOS + Homebrew + Node.js v24+
错误信息:
zsh: /opt/homebrew/bin/hexo: bad interpreter: /opt/homebrew/opt/node/bin/node: no such file or directory
问题原因
Hexo CLI 的可执行脚本(位于 /opt/homebrew/bin/hexo)第一行(shebang)硬编码了旧版 Homebrew Node.js 的路径:
#!/opt/homebrew/opt/node/bin/node
当 Node.js 通过 nvm、直接升级或重新安装后,这个路径不再存在,导致系统找不到解释器,命令无法执行。即使重新执行 npm install hexo-cli -g,若旧的二进制文件没有被覆盖,问题依然存在。
修复方案
方法一:彻底卸载重装(推荐)
这是最干净、最彻底的方案,适合大多数场景。
# 1. 卸载旧的 hexo-cli
npm uninstall hexo-cli -g
# 2. 删除残留的旧 shebang 文件
rm /opt/homebrew/bin/hexo
# 3. 确认当前 node 路径是否正常
which node
node -v
# 4. 重新全局安装
npm install hexo-cli -g
# 5. 验证修复结果
which hexo
hexo version
方法二:手动修复 shebang(快速)
如果不想重装,可以直接替换脚本第一行的解释器路径,速度最快。
# 查看当前 shebang 行(确认问题)
head -1 /opt/homebrew/bin/hexo
# 获取当前正确的 node 路径
NODE_PATH=$(which node)
echo $NODE_PATH # 应输出类似 /opt/homebrew/bin/node
# 替换 shebang(macOS 下 sed 需要 -i '')
sed -i '' "1s|.*|#!${NODE_PATH}|" /opt/homebrew/bin/hexo
# 验证是否修复
hexo version
方法三:软链接补齐旧路径
让旧路径重新指向当前 node,适合不想修改任何文件的场景。
# 创建旧路径目录并建立软链接
mkdir -p /opt/homebrew/opt/node/bin
ln -sf $(which node) /opt/homebrew/opt/node/bin/node
# 验证
hexo version
方案对比
| 方法 | 操作复杂度 | 是否彻底 | 适用场景 |
|---|---|---|---|
| 方法一:卸载重装 | 低 | ✅ 是 | 日常推荐,最稳妥 |
| 方法二:修复 shebang | 中 | ✅ 是 | 快速修复,不想重装 |
| 方法三:软链接 | 低 | ⚠️ 临时 | Node 版本固定时可用 |
长期建议:避免全局路径问题
全局安装的 CLI 工具依赖特定 Node 路径,升级 Node 后容易出现上述问题。以下两种方式可彻底规避:
方式 A:在项目本地安装 hexo-cli
# 在 Hexo 博客项目根目录执行
npm install hexo-cli --save-dev
# 之后所有命令改为 npx 前缀执行
npx hexo new post "AnyLink 部署指南 · 群晖 DSM 7.2.2"
npx hexo generate
npx hexo server
方式 B:使用 nvm 管理 Node 版本(推荐)
使用 nvm 管理 Node.js,切换版本后需重新安装全局包,但路径更稳定,不会因 Homebrew 升级破坏 shebang。
# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 使用 nvm 安装并切换 Node
nvm install 20
nvm use 20
# 重新安装 hexo-cli
npm install hexo-cli -g
快速验证命令
修复完成后,依次执行以下命令确认环境正常:
node -v # 确认 Node 版本
npm -v # 确认 npm 版本
which hexo # 确认 hexo 路径
hexo version # 确认 hexo 正常运行
hexo new post "测试文章" # 实际创建一篇文章测试