问题描述

我在 Windows 11 环境下使用 Claude Code(版本 2.1.201),通过 Git Bash 执行 Shell 命令时,凡是包含中文字符的内联参数都会失败,返回 Exit code 127No 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 在执行完用户命令后,尝试将当前工作目录写入临时文件时失败。
  • 仅当用户命令中包含中文内联参数时才触发此问题,纯英文命令不会。

已尝试的排查

  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 中并保存:
# 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.shbash $TEMP/test.sh
git commit -m "更新" Write %TEMP%\msg.txtgit commit -F %TEMP%\msg.txt
curl -d '{"text":"你好"}' Write %TEMP%\data.jsoncurl -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 自身的参数传递层。

求助

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

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐