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。

相关推荐
lclin_202021 小时前
VS2010兼容|C++系统全能监控工具(彩色界面+日志带单位+完整版)
c++·windows·系统监控·vs2010·编程实战
神秘剑客_CN1 天前
windows自带FTP服务搭建及防火墙设置
windows
广师大-Wzx1 天前
一篇文章看懂MySQL数据库(下)
java·开发语言·数据结构·数据库·windows·python·mysql
航Hang*1 天前
Windows Server 配置与管理——第8章:配置Web服务器
运维·服务器·windows·学习·vmware
用户8402505818521 天前
Claude Status监控:Claude API 频繁返回 529 `overloaded_error`?一份生产环境排障 Playbook
claude
EdmundXjs1 天前
flashrom v1.5.1 Windows
windows·stm32·单片机
兔老霸夏1 天前
claude_agent_sdk 功能简介
架构·claude
潘锦1 天前
OpenClaw 的 Skills 的实现和 Claude Code 不一样
agent·claude
钱多多_qdd1 天前
claude code(四):【Claude Code官方最佳实践2️⃣】:为claude提供更多工具
ai·claude
与虾牵手1 天前
Claude Code 怎么配置自定义 API 地址?2026 最完整的 3 种方案实测
ai编程·claude