Claude HUD 在 Windows 下不显示的修复记录
问题描述
在 Windows 系统上,Claude Code 的 claude-hud 插件状态栏始终不显示,即使插件已安装、配置文件存在,重启后也无效。
Claude HUD 显示效果:

环境信息
- 系统:Windows 11 Pro
- Shell:Git Bash (bash)
- Bun:1.3.9(路径:
C:\Users\admin\.bun\bin\bun) - claude-hud 版本:0.0.11
排查过程
1. 确认 bun 可用
bash
which bun
# /c/Users/admin/.bun/bin/bun ✓
/c/Users/admin/.bun/bin/bun --version
# 1.3.9 ✓
2. 确认插件目录存在
bash
ls ~/.claude/plugins/cache/claude-hud/claude-hud/
# 0.0.11 ✓
3. 确认 bun 可以运行 HUD 脚本
bash
plugin_dir=~/.claude/plugins/cache/claude-hud/claude-hud/0.0.11/
/c/Users/admin/.bun/bin/bun --env-file /dev/null "${plugin_dir}src/index.ts"
# [claude-hud] Initializing... ✓
脚本本身可以正常运行,说明问题不在 bun 或插件本身。
4. 定位真正的根因:shell 命令语法错误
settings.json 中的 statusLine.command 值经过 JSON 解码后,awk 部分的引号处理存在问题:
原始 JSON 中的命令(片段):
awk -F/ \\'{ print $(NF-1) "\\t" $(0) }\\'
JSON 解码后实际得到:
bash
awk -F/ \'{ print $(NF-1) "\t" $(0) }\'
问题所在:
外层命令是 bash -c '...'(使用单引号包裹),而 bash 的单引号字符串内不支持任何转义,\' 并不会被解释为字面量单引号,而是直接终止当前单引号字符串,导致整个命令语法错误,bash 直接报错退出,HUD 进程无法启动。
验证复现:
bash
# 模拟解码后的命令 ------ 会报语法错误
bash -c 'plugin_dir=$(... | awk -F/ \'{ print $(NF-1) "\t" $(0) }\' | ...)'
# bash: syntax error near unexpected token ')'
修复方案
用 sort -V(GNU 版本排序)替换原来的 awk 版本排序逻辑,完全避免单引号嵌套问题:
修复前(settings.json):
json
"command": "bash -c 'plugin_dir=$(ls -d \"${CLAUDE_CONFIG_DIR:-$HOME/.claude}\"/plugins/cache/claude-hud/claude-hud/*/ 2>/dev/null | awk -F/ \\'{ print $(NF-1) \"\\t\" $(0) }\\' | sort -t. -k1,1n -k2,2n -k3,3n -k4,4n | tail -1 | cut -f2-); exec \"/c/Users/admin/.bun/bin/bun\" --env-file /dev/null \"${plugin_dir}src/index.ts\"'"
修复后(settings.json):
json
"command": "bash -c 'plugin_dir=$(ls -1d \"${CLAUDE_CONFIG_DIR:-$HOME/.claude}/plugins/cache/claude-hud/claude-hud\"/*/ 2>/dev/null | sort -V | tail -1); exec \"/c/Users/admin/.bun/bin/bun\" --env-file /dev/null \"${plugin_dir}src/index.ts\"'"
sort -V 是 GNU coreutils 提供的版本号排序,Git for Windows 自带,行为与原 awk 版本排序等效。
修改的文件
~/.claude/settings.json---statusLine.command字段
结论
根因是 claude-hud 安装脚本生成的 bash -c '...' 命令中,awk 的单引号在 JSON 编码时处理有误(用 \\' 表示),解码后变成 \' 放入 bash 单引号字符串中,导致语法错误,HUD 进程无法启动。与 Windows 系统本身无关,属于 shell 字符串转义 bug。