Claude Code 的 Shell 工具因中文参数导致 Exit Code 127,求解决方案
·
问题描述
我在 Windows 11 环境下使用 Claude Code(版本 2.1.201),通过 Git Bash 执行 Shell 命令时,凡是包含中文字符的内联参数都会失败,返回 Exit code 127 和 No such file or directory 错误。
示例:
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(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 将命令包装成:
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 在执行完用户命令后,尝试将当前工作目录写入临时文件时失败。
- 但仅当用户命令中包含中文内联参数时才触发此问题,纯英文命令不会。
已尝试的排查
- 确认不是 Git Bash 本身的问题:直接在 Git Bash 终端中执行
echo "测试中文",输出完全正常。 - 确认临时目录可读写:
/c/Users/username/AppData/Local/Temp/目录访问正常,文件读写无权限问题。 - 更新 Claude Code 到最新版本:已运行
claude update,问题依旧。
临时解决方案(已确认有效)
通过 /memory 设置全局规则,强制 Claude Code 将含中文的操作写入脚本文件再执行:
步骤:
- 在 Claude Code 对话中输入
/memory - 将以下规则粘贴到
~/.claude/CLAUDE.md中并保存:
# 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"`
- 重启 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 自身的参数传递层。
求助
如何解决这个问题?我看别人的新版本没有这个问题。
更多推荐



所有评论(0)