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。

相关推荐
Cocktail_py2 小时前
Windows直接部署crawlab
windows·python·golang
John_ToDebug2 小时前
深入解析 Chrome 渲染进程合并优化策略:以 desktop_view 为例
c++·chrome·windows
fundoit2 小时前
Windows 下 PyTorch 环境搭建指南
人工智能·pytorch·windows
CaracalTiger3 小时前
Windows 环境下 OpenClaw 的安装与千问Qwen、Kimi、MiniMax、GLM国产大模型配置完全指南
运维·ide·windows·开源·github·aigc·ai编程
啥咕啦呛3 小时前
java打卡学习2:Stream高级与Optional
java·windows·学习
Blasit3 小时前
Qt 程序打包,运行提示找不到或无法加载平台插件 qwindows.dll
开发语言·windows·qt
C++ 老炮儿的技术栈3 小时前
c++常见配置文件格式 JSON、INI、XML、YAML 它们如何解析
xml·开发语言·c++·windows·qt·json
brucelee1863 小时前
Windows 11 安装 Go(Golang)教程
开发语言·windows·golang
Xiaoweidumpb4 小时前
win10 Windows服务器开放端口防火墙规则 远程控制桌面
运维·服务器·windows