Claude Code 的 Shell 工具因中文参数导致 Exit Code 127,求解决方案

问题描述

我在 Windows 11 环境下使用 Claude Code(版本 2.1.201),通过 Git Bash 执行 Shell 命令时,凡是包含中文字符的内联参数 都会失败,返回 Exit code 127 和 No such file or directory 错误。

示例:

bash 复制代码
echo "测试中文"          # Exit code 127
git commit -m "更新"    # Exit code 127
curl -d '{"text":"你好"}' # Exit code 127

但以下情况全部正常:

  • 纯英文命令:echo "test"
  • 命令输出包含中文(非参数):date 输出 2026年07月 4日
  • 读取包含中文内容的文件:cat data.json
  • 执行包含中文的脚本文件:bash script.sh

环境信息

项目 信息
操作系统 Windows 11 Home China
Shell Git Bash (MINGW64 2.11.2, GNU bash 4.4.23)
Claude Code 版本 2.1.201
终端 Windows Terminal

完整报错信息

最简单的复现方式:

bash 复制代码
● Bash(echo "测试")
  ⎿  Error: Exit code 127
     /usr/bin/bash: export TEMP='C:\Users\username\AppData\Local\Temp' TMP='C:\Users\username\AppData\Local\Temp' && shopt -u extglob 2>/dev/null || true && eval 'echo "测试"' < /dev/null && pwd -P >|
     /c/Users/username/AppData/Local/Temp/claude-c4a6-cwd: No such file or directory

可以看到,Claude Code 将命令包装成:

bash 复制代码
export TEMP=... TMP=... && shopt -u extglob 2>/dev/null || true && eval 'echo "测试"' < /dev/null && pwd -P >| /c/Users/username/AppData/Local/Temp/claude-xxx-cwd

关键观察:

  • eval 'echo "测试"' 本身语法正确,Bash 可以解析。
  • 报错在最后一步:pwd -P >| /c/Users/username/AppData/Local/Temp/claude-xxx-cwd: No such file or directory
  • 这是 Claude Code 在执行完用户命令后,尝试将当前工作目录写入临时文件时失败。
  • 但仅当用户命令中包含中文内联参数时才触发此问题,纯英文命令不会。

已尝试的排查

  1. 确认不是 Git Bash 本身的问题 :直接在 Git Bash 终端中执行 echo "测试中文",输出完全正常。
  2. 确认临时目录可读写 :/c/Users/username/AppData/Local/Temp/ 目录访问正常,文件读写无权限问题。
  3. 更新 Claude Code 到最新版本 :已运行 claude update,问题依旧。

临时解决方案(已确认有效)

通过 /memory 设置全局规则,强制 Claude Code 将含中文的操作写入脚本文件再执行:

步骤:

  1. 在 Claude Code 对话中输入 /memory
  2. 将以下规则粘贴到 ~/.claude/CLAUDE.md 中并保存:
markdown 复制代码
# Shell 工具规则(Windows)------临时绕过方案
禁止在 Shell 参数中直接写中文。  
改用 Write 写脚本到临时目录后再执行:

- `.sh` / `.py` → Write `$TEMP/script.sh`,执行 `bash $TEMP/script.sh`
- `.bat` / `.ps1` → Write `%TEMP%\script.bat`,执行 `cmd /c "%TEMP%\script.bat"`
  1. 重启 Claude Code

效果示例:

原来(报错) 现在(可行)
echo "测试" Write $TEMP/test.sh → bash $TEMP/test.sh
git commit -m "更新" Write %TEMP%\msg.txt → git commit -F %TEMP%\msg.txt
curl -d '{"text":"你好"}' Write %TEMP%\data.json → curl -d @%TEMP%\data.json

路径简写说明:

  • $TEMP(Git Bash 中)→ /c/Users/username/AppData/Local/Temp/
  • %TEMP%(cmd 中)→ C:\Users\username\AppData\Local\Temp\

关键发现

  • 执行脚本文件可以绕过此问题 :将含中文的命令写入 .sh 脚本文件,再通过 bash script.sh 执行,可以正常工作。以上临时方案正是基于此原理。
  • 问题仅发生在 Claude Code 的 Bash 工具通过 eval 直接传递内联参数 的场景。
  • 官方 Issue #31295 描述了类似问题,但已被关闭为 "not planned"。
  • 对比验证 :我用 Hermes Chat (另一个 AI 编程助手)在相同环境下执行 echo "测试中文",可以正常执行并输出中文。这进一步说明问题不在 Git Bash 或系统环境,而在于 Claude Code 自身的参数传递层。

求助

如何解决这个问题?我看别人的新版本没有这个问题。

相关推荐
jerrywus5 小时前
让 AI 写完代码后交一份报告:我改造了 answer-me-with-html
前端·claude·cursor
sg_knight11 小时前
Claude Desktop 的 Chat 模式实测:桌面端比网页版多出来的能力
llm·agent·ai编程·claude·anthropic·claude-code
程序员龙一14 小时前
VsCode+ClaudeCode+Deepseek的配置
vscode·claude·deepseek·vibecoding
babytiger14 小时前
Codex CLI 与 Claude Code CLI:Windows 安装、版本查询、更新及 npm 镜像配置
claude·cli·codex
一缕82年的清风18 小时前
Windsurf 凭什么敢叫板 Cursor?深度实测一周,聊聊底层机制与真实心路
claude·cursor
乘风gg18 小时前
一个人一个月合并 2500 PRs 的秘密是什么?
前端·ai编程·claude
一缕82年的清风2 天前
上下文工程(Context Engineering):为什么说它是 AI 编程时代最重要的核心内功?
claude·cursor
向霸天2 天前
从Claude code来看业务中如何设计一个agent的核心部分
claude
冬奇Lab2 天前
一天一个开源项目(第234篇):CC Switch —— 一个 App 管理十款 AI 编程工具的 Provider、MCP、Skills 和 Prompts
人工智能·开源·claude