Claude Code 在 zsh 下写 bash 语法:每千次调用 51 次失败,76% 静默
stagefright5 · ghdev · 2026-10-17
anthropics/claude-code 仓库 issue #103027(#67146 的后续)作者用自己约 12 周的会话记录统计了 Claude Code 在 macOS zsh 登录 shell 下仍写 bash 风格命令的问题。
数据(2026-07-28 至 10-17,Claude Code 2.1.x,主要为 Opus 5.5)
- 287 个会话、61,040 次 Bash 调用,其中 2,570 次出现 zsh 报错行((eval):N: …),含子 agent 记录
- 失败率上升 3.5 倍:7/28–9/20 为每千次 14.7 次,9/21–10/17 升至 51.3 次
- 76% 为静默失败:Bash 调用仍以 0 退出,错误夹在输出中间
- 87% 是同一会话内已犯过的同类错误重复出现
- Claude 仅在约 82 条回复中归因于 zsh,约占 3%
- 直接成本不高:按 API 标价约 53 美元(占支出 0.7%)、约 71 分钟模型时间;更大风险是 Claude 基于静默不完整的输出下结论
主要失败模式
- 未加引号的 glob 出现在参数值中(1,296 次):如 grep -rn foo src --include=.ts,zsh 会按当前目录展开,无匹配时报 no matches found 直接中止
- 未匹配的路径 glob(656 次):如 ls libs//README.md,zsh 中止而非透传模式
- = 词展开(549 次):如用 echo ==== 作分隔符,被当作 =cmd 展开报 === not found
- 变量未分词(28 次,通常静默):G="git -C repo"; $G log 在 zsh 中不拆分,程序只收到一个参数
- 冒号修饰符(21 次):git show $B:shared/package.json 中 :s/:t/:h/:r 被当作历史修饰符,破坏 ref:path
- 数组下标(7 次):grep -oE "$pat[^};]" 被解析为对 $pat 取下标
- 仅 bash 支持的展开(2 次):如 ${!v} 报 bad substitution
「编程与Agent」频道最新
- Garry Tan 力挺 Aside Browser:让 Agent 真正用好网页的解法 — garrytan · 2026-10-23
- Monid 发布 Agent 工具真实用量榜:TinyFish 居首周处理 75 万次 — HeyAmit_ · 2026-10-23
- MCP 服务器 30 天后暗藏窃取 SSH 密钥指令,作者开源 mcp-guard 防变节 — ErgoniaWorks · 2026-10-23
- 实测:不在 AGENTS.md 里写明的 MCP 工具,编码 Agent 不会用 — colinmcnamara · 2026-10-23
- 用开源模型+Claude 把一段网球视频变成世界级教练 — tweetsatpreet · 2026-10-23
- 132 个免费开源 AI Agent 与 RAG 项目合集,星标 1.65 万 — Arindam_1729 · 2026-10-23