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。

相关推荐
燃烧的枫34 分钟前
Windows 下 YOLO11 Det 的 TensorRT C++ 部署
pytorch·windows·tensorrt·关键点识别·yolo11
猪八宅百炼成仙2 小时前
让 AI 帮你清理电脑而不翻车:一个 Windows 体检调优 Skill 的工程化设计
人工智能·windows
鱼宵3 小时前
取集合第一个元素,Java 为什么要写三种写法?
java·windows·python·java21
kingx34 小时前
Windows Server 2008 应急加固实战:7 项入侵痕迹排查与修复
数据库·windows·提权·应急响应·加固
海域云SeaArea_7 小时前
Windows Server 2008 R2 从零安装 IIS7.5(二):php.ini 配置
开发语言·windows·php
jerrywus8 小时前
Skill、MCP、Workflow、Rules、Memory 有什么区别?拿几次真实开发任务讲清楚
前端·agent·claude
IsITGirl11 小时前
VMware Fusion(Mac)Windows ARM 虚拟机 NAT (vmnet8) 报错解决记录
windows·macos·.net·桥接模式
Rudon滨海渔村11 小时前
台式机Win10实现“音量+”和“音量-”,键盘映射方案
windows·计算机外设·powertoys
2501_9159214311 小时前
KXBuild CI 实操,Windows/Linux 服务器接入 Jenkins 打包 iOS IPA
服务器·windows·vscode·ios·ci/cd·个人开发·敏捷流程