Claude HUD 在 Windows 下不显示的修复记录

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。

相关推荐
fangjianj14 小时前
windows环境反弹shell
linux·windows·web安全
有味道的男人14 小时前
得物详情 API|支持实时价格、成色、鉴别服务数据
windows·python·api
老王的笔记v15 小时前
46期 Windows超级管理器 垃圾清理 预装卸载与系统优化工具箱
windows·系统架构
张人玉17 小时前
基于 C# / .NET 8 + Windows Forms + SQLite 的桌面银行业务演示系统——华夏示范银行管理系统
windows·sqlite·c#·.net
Mr-Apple19 小时前
系统找不到指定的文件-CreateInstance/CreateVm/HCS/ERROR_FILE_NOT_FOUND
linux·windows·ubuntu·wsl
JSUITDLWXL19 小时前
jitsi-windows-local-translation
windows
Sophnet云平台20 小时前
Claude Code Agent Teams发布:多Agent协作编码意味着什么
gpt·ai·ai编程·claude·agi·codingplan
点亮~黑夜1 天前
远程连接浏览无桌面服务器上的图片
windows·软件构建
Albart5751 天前
Docker Desktop 增量更新失败终极排查:Failed to apply delta update 反复回滚怎么办?
windows·docker·容器·docker部署大模型
Patrick在香港1 天前
Claude + Python 数据管道:一次字段改名,786 行历史数据被静默重写
开发语言·windows·python·claude·数据工程·数据校验·数据管道