Skip to content

一个命名不合法的命令,让所有命令都加载失败:2.1.312 修复 claude -p 没有输出 ​

把 Claude Code 接进脚本或 CI 的人,大多用的是 claude -p 非交互模式。如果某天它突然什么都不输出、也不报错,排查起来会非常头疼。CLI 2.1.312 修掉的正是一个能造成这种现象的 bug。

问题是什么 ​

更新说明的意思是:修复了一个名称不合法的命令会导致所有命令都无法加载的问题,这种情况下 claude -p 可能没有任何输出。

也就是说,只要你的命令目录里(项目级、用户级,或插件带进来的)有一个命令的名字不符合规则,整个命令加载过程就会失败。结果不只是这一个命令用不了,而是所有自定义命令一起「消失」,非交互模式下更可能直接静默退出。

典型表现 ​

  • 交互模式下输入 /,命令菜单里少了一大片,或者只剩内置命令;
  • claude -p "..." 跑完没有任何输出,退出也看不出明显异常;
  • 问题出现的时间,往往刚好是你或同事新加了一个命令、或者装了一个新插件之后。

最后这一条是最有用的线索:静默失败通常不是 Claude Code 「坏了」,而是最近引入的某个命令文件出了问题。

升级后的行为 ​

升级到 2.1.312 后,单个命令名称不合法不会再拖垮其他命令的加载,claude -p 也不会因此静默无输出。

怎么排查和预防 ​

即便已经升级,那个命名有问题的命令本身多半还是用不了,值得顺手清理掉:

  1. 回忆最近新增或改名的命令文件,以及新装的插件;
  2. 检查文件名里有没有空格、特殊符号或奇怪的字符,可以临时把可疑文件移出命令目录对比;
  3. 命令命名尽量保守:小写字母、数字和连字符最稳妥,例如 release-notes、run-e2e。

对 CI 来说,还有一个通用建议:给 claude -p 的步骤加上「输出为空就判定失败」的检查。这样以后再遇到类似的静默问题,流水线会第一时间告诉你,而不是悄悄通过。

小结 ​

这次修复让命令加载更有容错:一个坏文件不再连累整个目录。如果你曾经遇到 claude -p 莫名其妙没输出,升级之后再试一次,同时把那个命名不规范的命令找出来改掉。

Claude-cn.org,专注于 Claude Code 中文教程