You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

解决Claude Code在Windows执行shell命令时无限挂起的问题

解决Claude Code在Windows执行shell命令时无限挂起的问题

我最近在Windows上用Claude Code时遇到了一个巨头疼的问题:每次执行lsfindgrep或者./gradlew这类shell命令,都会直接卡住,等好几分钟都没输出,只能手动按x杀掉shell进程,或者干脆重启Claude Code。更糟的是,后台还会不断积累僵死的shell进程,最多的时候堆了9个以上,看着都闹心。

我的环境背景

  • Windows 10/11 系统
  • 已安装Git for Windows
  • Claude Code v2.x(通过npm全局安装)
  • 项目文件都放在D盘
  • 公司统一用Bitdefender Endpoint Security做杀毒软件

具体症状

  • 执行ls "D:\Projects\..."这类路径命令,5分钟以上完全没输出
  • find . -name "*.java"直接无限挂起,动都不动
  • 运行./gradlew assembleDebug会立即冻结
  • /init命令会 spawn 多个bash shell,全部卡死
  • 后台僵死的shell进程越积越多,清理都麻烦

我踩过的无效坑

  • 重装Claude Code(没用,问题依旧)
  • 分别从Git Bash、PowerShell启动Claude Code(换启动环境也没解决)
  • 尝试给Windows Defender加排除项(但公司权限卡死了,根本加不了)
  • 在命令前加timeout前缀(完全没效果)

折腾了一圈这些方法都白搭,直到我挖到了真正的根因,才彻底把问题解决。

根因分析

哪怕你从PowerShell启动Claude Code,它内部其实会默认用Git Bash(MSYS)——只要你装了Git for Windows。Claude Code选择内部shell的优先级是这样的:

  1. 优先读~/.claude/settings.json里的shellPath配置(我这里是空的)
  2. 其次看系统的SHELL环境变量(我的指向了Git Bash)
  3. 最后在PATH里找第一个bash.exe(我的PATH里刚好有C:\Program Files\Git\usr\bin\bash.exe

因为我没设置shellPath,Claude Code自动从PATH里捡了Git Bash用,这就捅了两个娄子:

  • MSYS路径转换拖垮性能:每次访问D盘路径时,D:\path都会被强制转换成/d/path,在大目录下这种转换会产生巨量的额外开销,直接导致命令卡死。

最终解决办法

只需要修改Claude Code的配置文件,强制它用PowerShell作为内部shell就行:

  1. 打开C:\Users\<你的用户名>\.claude\settings.json(把<你的用户名>换成你自己的Windows用户名)
  2. 将文件内容替换成下面的配置(注意反斜杠要转义):
{
  "shellPath": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
  "env": {
    "SHELL": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"
  }
}
  1. 保存文件后重启Claude Code

这样设置后,Claude Code会直接用PowerShell作为内部shell,彻底绕开Git Bash的路径转换问题,命令终于能正常跑起来了!

火山引擎 最新活动