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

问题描述

我在 Windows 11 环境下使用 Claude Code(版本 2.1.201),通过 Git Bash 执行 Shell 命令时,凡是包含中文字符的内联参数 都会失败,返回 Exit code 127No 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.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 自身的参数传递层。

求助

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

相关推荐
至乐活着2 小时前
让Claude能力飞升:用MCP协议构建自定义工具实战
claude·mcp·model context protocol·自定义工具·ai扩展
冬奇Lab3 小时前
开源项目第151期:codex-plugin-cc — 在 Claude Code 里直接调用 OpenAI Codex
人工智能·开源·claude
vortex55 小时前
Shell 命令执行知识体系全景解析
linux·运维·bash·shell·命令行
米小虾5 小时前
2026年7月AI圈大地震:GPT-5.6被政府限制、Claude入驻Slack、Anthropic自研芯片
人工智能·chatgpt·claude
vortex56 小时前
Shell 位置参数传递:从入门到“怀疑人生“
linux·bash·shell
kyriewen16 小时前
我筛了 1400 个 Claude Code Skills,留下 5 个天天在用的
前端·ai编程·claude
liulei3369dot19 小时前
Claw Agent MCP 接入全记录:从卡死两天到手机随身调用
claude·mcp
ZzT1 天前
各大 AI 的系统提示词被扒光了,我从里面学到了写指令的功夫
ai编程·claude