修复 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 "测试文章"  # 实际创建一篇文章测试