工具大全
Claude 指南2026年8月7日6 次阅读约 2 分钟阅读

claude install 断链、%h 未展开?Debian 容器实测装出来是好的(未复现)

本文性质:未复现实录。我们没有复现出报告中的问题——这不代表报告是错的,只代表在下述环境、用下述方法测不出来。全部命令与原始输出都在文中,欢迎交叉验证。

原始报告说了什么

GitHub issue #83484(Fedora 44 + bash,Claude Code 2.1.220):运行官方一键安装后,~/.local/bin/claude 是一条断掉的符号链接——

$ curl -fsSL https://claude.ai/install.sh | bash
$ file ~/.local/bin/claude
/home/user/.local/bin/claude: broken symbolic link to %h/.local/share/claude/versions/2.1.220

链接目标里的 %h 是个未展开的占位符(systemd 风格的家目录指示符),本应是 /home/user。报告者定位问题不在 shell 安装脚本,而在二进制内部的 install 子命令;并称此前版本正常,属回归。issue 关联了一个修复 PR(#83738,报告时未合并)。

我们的实测:装出来是好的

环境:干净的 Docker 容器 debian:bookworm-slim,root 用户,2026-08-06 执行与报告完全相同的安装命令:

$ curl -fsSL https://claude.ai/install.sh | bash
$ ls -la /root/.local/bin/claude
lrwxrwxrwx 1 root root 42 Aug  6 10:23 /root/.local/bin/claude -> /root/.local/share/claude/versions/2.1.223
$ file /root/.local/bin/claude
/root/.local/bin/claude: symbolic link to /root/.local/share/claude/versions/2.1.223

两个关键观察:

  1. 符号链接是正常的——目标路径里的家目录已正确展开为 /root,没有出现字面量 %h
  2. install.sh 当前分发的版本是 2.1.223,比报告中的 2.1.220 新了三个版本(2.1.221/222/223 分别发布于 8 月 3/4/5 日)

为什么没复现:三种可能解释

按证据强度排序:

解释一:已在 2.1.221–2.1.223 之间修复(最可能)。 报告发生在 2.1.220,关联修复 PR 存在,而现在 install.sh 直接分发 2.1.223——如果修复已合入其中任何一版,新装用户自然不会再遇到。但我们没有找到明确写着"修复 %h 展开"的发版说明,无法坐实。

解释二:发行版相关。 报告环境是 Fedora 44,我们测的是 Debian 12。%h 是 systemd 单元文件里的家目录指示符——如果二进制的 install 子命令在某些系统上从 systemd 相关配置读取路径模板,行为可能随发行版而异。这只是机制猜想,我们没有 Fedora 环境验证。

解释三:报告环境的残留状态。 报告者称"此前版本正常",旧安装的残留配置可能参与了路径生成。干净容器里没有任何残留,这或许正是测不出来的原因——但同样无法证实。

如果你正被断链卡住:一分钟修复

无论根因是什么,断链的修复是确定的(来自 issue 中报告者验证过的 workaround):

# 把断链指向真实存在的版本目录(版本号按你机器上实际的改)
ls ~/.local/share/claude/versions/        # 先看有哪些版本
ln -sf ~/.local/share/claude/versions/<版本号> ~/.local/bin/claude
claude --version                          # 验证可用

更省事的选择:直接重跑一次官方安装命令——当前分发的 2.1.223 在我们的实测里装出来就是好的。

适用边界

  • 本文只证明:Debian 12 干净环境 + 2026-08-06 的 install.sh(分发 2.1.223)不出现此问题
  • 不能证明:Fedora 上已修复、2.1.220 的问题不存在、或所有环境都正常
  • 如果你在其它发行版上仍能复现(尤其 Fedora + 2.1.221 及以后版本),请到 issue #83484 补充环境信息——那将直接推翻解释一、坐实解释二

相关文章

Claude Code 报 No conversation found to continue:你的 -p 会话被交互模式过滤掉了

用 claude -p 跑完一条无头命令,接着敲 claude --continue 想进交互模式续聊,得到的却是 No conversation found to continue——但会话文件明明就在磁盘上。这是 v2.1.90 引入的回归:--resume 选择器'不展示 -p/SDK 会话'的过滤逻辑,误伤了本应无条件继续最近会话的 --continue。本文在 macOS + v2.1.220 上完整复现(GitHub issue 报告的是 Fedora,两平台坐实),给出两条实测可用的绕行:无头续聊 -p --continue 一直是通的;交互模式用 CLAUDE_CODE_ENTRYPOINT=sdk-cli 前缀可以绕过过滤、完整加载历史。

claude-codeheadless+4
claude2026年8月6日2 min
20

Claude Code 到底在用哪个模型?settings.json、环境变量、--model 的优先级实测

多智能体、CI、批量脚本都依赖一个前提:会话真的跑在你配置的模型上。但模型可以在四个地方指定——settings.json、ANTHROPIC_MODEL 环境变量、--model 参数、会话内 /model——文档没有一张表告诉你谁覆盖谁,GitHub 上还有 Windows 用户报告 settings.json 配置被静默忽略、一整天的任务跑错模型全部作废。本文用 modelUsage 铁证逐层实测出优先级链:--model > ANTHROPIC_MODEL > 项目 settings.json > 内置默认,[1m] 后缀写法同样生效;并给出一个比任何 UI 提示都可靠的验证手段。

claude-codeclaude-code-lab+4
claude2026年8月6日3 min
19

Claude Code Hooks 的 stdin 陷阱:python heredoc 会吃掉你的 hook JSON

官方文档说 hook 通过 stdin 接收 JSON 输入,这没错。但如果你在 hook 脚本里用 python heredoc(python3 - <<'EOF')来解析这份 JSON,会掉进一个静默失败的坑:heredoc 把 python 的 stdin 重定向成了脚本本身,json.load(sys.stdin) 读到的永远是空。更糟的是,按最佳实践写的 hook 会吞掉一切异常静默退出——你不会看到任何报错,只会发现 hook '好像没生效'。这篇记录真实踩坑过程、两行代码的修复方案,和一个通用教训:静默容错的代码,调试时是你自己的敌人。

claude-codehooks+5
claude2026年8月6日3 min
40

我按「删掉这 5 类提示词」清了 Opus 5 配置,然后跑了 18 次 A/B:省了 21%,但「更好」我拿不出证据

「Opus 5 自带验证,把兜底提示词全删掉」——这个说法很流行,我照做了,然后用 CLAUDE_CONFIG_DIR 隔离出新旧两份全局配置,同任务同模型跑了 18 次 headless 对照。省 token 是真的:输出 token -21%,耗时 -20% 到 -29%,全部 9 组三次运行无一例外。但被删掉的规则里有两条根本没测出效果,还有一个反例:旧配置最认真的那一次,覆盖面是新配置所有运行的严格超集。这篇写实验怎么搭、数据长什么样,以及为什么「省」和「好」必须分开问。

claude-code提示词工程+4
claude2026年8月5日6 min
32