Claude Code 在 Windows 上的常见坑:Git Bash 还是 PowerShell、路径反斜杠、假报错、WSL 怎么选

Windows 上用 Claude Code,装好之后最容易踩的是:用哪个 shell、路径写法不一致、grep 没匹配就报错、钩子没生效、WSL 和原生怎么选。本文逐条按官方文档整理原因和处理办法,附三段提示词和一张对照表。

NNathaniel bigo··原创首发·AI 辅助撰写
14 分钟读完
资料核对于 2026-11-05 · 依据官方文档与公开资料整理 Pro 账号
本文根据 Claude Code 官方文档《Advanced setup》《Tools reference》《Configure permissions》《Hooks reference》《Extend Claude with skills》《Troubleshooting》整理,资料核对于 2026-11-05。配图为本站整理的示意图,不是界面截图。本站(bigolab.com)不是 Anthropic 官方网站。

适用于谁

  • 已经在 Windows 上装好 Claude Code,但碰到命令跑不起来、路径对不上、莫名其妙的「错误」的人;
  • 不知道自己的 Claude 到底在用 Git Bash 还是 PowerShell 的人;
  • 在原生 Windows 和 WSL 之间犹豫的人。

安装方式怎么选、装不上怎么办,见 /guides/claude-code-install-methods-git-npm-official 和 /guides/claude-code-install-slow-stuck-failed,本文不重复。

结论先说

  1. Claude 在 Windows 上有两种 shell 工具:Bash 和 PowerShell。 官方说:没装 Git for Windows 时,命令通过 PowerShell 工具运行;装了就用 Git Bash 作为 Bash 工具,同时 PowerShell 工具也可用(claude.ai 和 Console 账号默认开)。
  2. 找不到 Git Bash 就告诉它在哪:在 settings.json 的 env 里设 CLAUDE_CODE_GIT_BASH_PATH,官方示例是 C:\\Program Files\\Git\\bin\\bash.exe。
  3. 「报错」不一定是真错。 官方列了几种:grep/rg 没匹配到、git diff 有差异、where.exe 找不到、robocopy 返回 1 到 7,都会显示 Exit code 1 之类,但命令没有失败。
  4. 路径别混着写。 权限规则里 Windows 路径会先转成 POSIX 形式;钩子收到的文件路径却是反斜杠,用正斜杠写的判断永远匹配不上。
  5. 原生 Windows 不支持沙箱,WSL 2 支持。 这是官方对照表里最关键的差别。

原生 Windows 与 WSL 对照

图:本站根据 Claude Code 官方文档:Advanced setup 整理的示意图

坑一:到底用的是哪个 shell

症状:Claude 写的命令是 export、ls -la、&&,在你机器上报错;或者它写 PowerShell 语法时,又在 Bash 里不认。

官方的机制是:

  • 没有 Git for Windows:只有 PowerShell 工具,Claude Code 根本不注册 Bash 工具。
  • 有 Git for Windows:Bash 工具可用;PowerShell 工具对 claude.ai 和 Console 账号默认开启,通过 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 使用时,要设环境变量 CLAUDE_CODE_USE_POWERSHELL_TOOL=1 才开,设为 0 则关闭。
  • PowerShell 工具开启时,官方说 Claude 把 PowerShell 当作主要 shell,Bash 工具在装了 Git Bash 的情况下仍可用于 POSIX 脚本。

怎么确认?直接问它,或者看项目里用的是哪种语法。然后在 CLAUDE.md 里写明约定,免得它每次猜。

提示词 1:让 Claude 报告当前环境并写进 CLAUDE.md

text
请告诉我你当前能用的 shell 工具有哪些(Bash、PowerShell),各自跑在什么环境里。分别运行 uname 或 $PSVersionTable,确认版本。
然后在 CLAUDE.md 里加一节「运行环境」,写明:操作系统是 Windows;项目的命令应优先用【PowerShell / Git Bash】写;路径用【正斜杠 / 反斜杠】;不要使用 Linux 才有的命令(除非在 Git Bash 里)。
先把要加的内容给我看,我同意后再写。

还有一个容易漏的坑,官方在 PowerShell 一节写了:**在装了 Git Bash 的 Windows 上,一旦你给 Bash 加了拒绝规则(哪怕是 Bash(git push ) 这种带范围的),PowerShell 工具会被自动关闭*,因为 Bash 规则管不到 PowerShell,留着它会绕过你的规则。解决办法:设 CLAUDE_CODE_USE_POWERSHELL_TOOL=1,或者给 PowerShell 也加一条对应的拒绝规则,如 PowerShell(git push *)。否则 PowerShell 会被悄悄关掉,没有任何警告。

坑二:路径

权限规则里的路径。 官方说明:Windows 上,路径在匹配前会被标准化成 POSIX 形式,C:\Users\alice 变成 /c/Users/alice。所以想匹配整个 C 盘下任意位置的 .env,规则要写 //c//.env;匹配所有盘符用 ///.env。官方示例里 Read(./.env) 这种相对项目目录的写法照常使用。

钩子收到的路径。 官方说:Windows 上 Write、Edit、Read 的 file_path 永远是绝对路径,而且用反斜杠,即使钩子跑在 Git Bash 里。你的脚本里如果用 /src/ 这种正斜杠判断,永远匹配不上,钩子等于没写,调用照常放行。官方的修法:先把反斜杠换成正斜杠,在 Bash 里是 FILE_PATH="${FILE_PATH//\\//}",在 Python 里是 file_path.replace("\\", "/"),再匹配 /src/ 这样的路径片段。

网络路径。 官方说,命令参数里带 UNC 路径(\\server\share\file)会弹权限提示,因为访问网络路径可能把你的 Windows 凭据发给目标主机;读文件工具读网络路径也要单独检查,而且这类路径不能直接加成工作目录。官方的办法:把共享映射成盘符,再用 --add-dir 加,例如共享映射为 Z:,在 PowerShell 里运行 claude --add-dir Z:\。

坑三:不是错误的「错误」

官方在 PowerShell 一节列了这些情况,都显示 Error: Exit code 1,但命令没失败,你什么都不用做:

  • grep、rg、findstr、git grep 没找到匹配(它们用退出码 1 表示没匹配);
  • git diff 发现有差异(退出码 1 表示有不同);
  • where.exe 没找到、fc.exe、diff.exe 发现文件不同;
  • robocopy 返回 1 到 7(官方说 0 到 7 都是在汇报结果,8 以上才是失败)。

官方还说,当这类搜索在更长的命令里(例如 rg foo | Out-Null)时更容易冒出这个提示。把这个知识交给 Claude,它就不会在「没匹配」时瞎找原因。

提示词 2:解释一段看起来像报错的输出

text
下面这段命令输出里出现了 Error: Exit code 1。请判断它是真的失败,还是只是「没有匹配」或「文件不同」这类正常的退出码:
【粘贴命令和输出】
说明你判断的依据;如果是真错,给出下一步排查命令,先不要修改任何文件。

坑四:脚本、技能和钩子里的 shell

  • 钩子:每个命令类钩子可以加 "shell": "powershell",直接用 PowerShell 运行,不依赖 PowerShell 工具开关;没装 Git Bash 时,钩子默认用 PowerShell,Bash 写的脚本可能失败。官方的修法是装 Git for Windows,或设 CLAUDE_CODE_GIT_BASH_PATH,然后开新会话。
  • 钩子匹配:要拦截 shell 命令,matcher 写 Bash|PowerShell,只写 Bash 不够。
  • 钩子引用脚本:PowerShell 里引用项目目录写 ${CLAUDE_PROJECT_DIR} 或 $env:CLAUDE_PROJECT_DIR,不要写 $CLAUDE_PROJECT_DIR,那会被解析成空变量。
  • npm、npx 这类 .cmd 文件:官方说,exec 形式的钩子需要指向真正的可执行文件(.exe),npm、npx、eslint 等在 node_modules/.bin 里装的 .cmd、.bat 垫片不是可执行文件,没有 shell 就启动不了。
  • 技能里的预执行命令:frontmatter 里写 shell: powershell 可以让它们在 PowerShell 里运行,要求 PowerShell 工具已开启;写死 shell: bash 而电脑没有 Git Bash,调用会直接失败。

钩子的完整例子见 /guides/claude-code-hooks-run-tests-before-commit,基础见 /guides/claude-code-hooks。

坑五:执行策略、编码和环境变量

  • 执行策略。官方说,PowerShell 工具会用 -ExecutionPolicy Bypass 启动,仅作用于该进程,所以 .ps1 脚本在默认 Windows 上也能运行,但不会覆盖组策略;想遵守机器的有效策略,设 CLAUDE_CODE_POWERSHELL_RESPECT_EXECUTION_POLICY=1。
  • 编码。官方说,PowerShell 5.1 里用 > 和 >> 重定向写出的是 UTF-8 文件,Claude Code 往原生命令标准输入传的文本也是 UTF-8。
  • 环境变量不跨命令保留。官方说,Bash 工具里一条命令的 export 在下一条命令里没有;想持久化,设 CLAUDE_ENV_FILE 指向一个脚本,或用 SessionStart 钩子。工作目录则会保留,只要还在项目目录或你用 --add-dir 加的目录内。
  • 不加载配置文件。官方的已知限制:PowerShell 工具不会加载 PowerShell 的 profile,你在 profile 里设的别名和变量它看不到。

坑六:原生还是 WSL

官方把三种方式摆在一张表里:

  • 原生 Windows:不需要任何前置;Git for Windows 可选;不支持沙箱;适合 Windows 原生的项目和工具。
  • WSL 2:需要先启用 WSL 2;支持沙箱;适合 Linux 工具链,或需要沙箱化执行命令的场景。
  • WSL 1:需要启用 WSL 1;不支持沙箱;WSL 2 用不了时才考虑。

WSL 里有两点要注意:一是官方排错说,跨文件系统访问有读盘性能损失,可能导致搜索匹配比预期少,建议项目放在 Linux 文件系统(/home/),而不是 /mnt/c/;二是官方 Chrome 集成文档写明,不支持 WSL。沙箱的说明见 /guides/claude-code-sandbox-security。

Windows 上症状与处理对照

图:本站根据官方文档整理的示意图

一次排查流程

提示词 3:新项目的 Windows 自检

text
请检查这个项目在我的 Windows 环境里能不能正常工作:
1)列出 package.json 或脚本里用到的所有命令,标出哪些在 PowerShell 里不能直接用(比如 rm -rf、export、&&);
2)检查是否有硬编码的 Linux 路径(如 /tmp、/usr/);
3)检查换行符设置,仓库里有没有 .gitattributes,脚本文件是否会被转成 CRLF 而在 Git Bash 里出错;
4)给出修改建议,用跨平台的写法(Node 脚本或 npm 包)替代,先不要改文件。

第 3 条是通用的 Windows 开发常识,官方文档没有专门写。

常见问题

Q:不装 Git for Windows 行不行?

行,官方说它是可选的,没装时 Claude 用 PowerShell。装了可以用 Bash 工具,对只会 Bash 写法的脚本更方便。

Q:以管理员身份运行 Claude Code?

官方说明安装不需要管理员权限。是否以管理员运行,官方文档没有推荐,建议不要。

订阅和额度

环境问题多半靠读取少量配置就能解决,用不了多少额度。订阅选择见 /chongzhi/claude-code,价格和额度以官方页面当前显示为准。

相关教程

参考资料

  • Claude Code 文档:Advanced setup — https://code.claude.com/docs/en/setup
  • Claude Code 文档:Tools reference — https://code.claude.com/docs/en/tools-reference
  • Claude Code 文档:Configure permissions — https://code.claude.com/docs/en/permissions
  • Claude Code 文档:Hooks reference — https://code.claude.com/docs/en/hooks
  • Claude Code 文档:Extend Claude with skills — https://code.claude.com/docs/en/skills
  • Claude Code 文档:Troubleshooting — https://code.claude.com/docs/en/troubleshooting

Nathaniel 的更多内容

  1. 01

    Claude Code Hooks 实战「提交前自动跑测试」:PreToolUse 拦住 git commit,测试不过就退出码 2,附 Windows 注意点

    只写一个完整例子:让 Claude Code 每次要执行 git commit 之前,先自动跑项目测试,没通过就拦下并把输出交给它修。本文按官方 Hooks 文档给出脚本、settings.json 配置、测试方法、排错和 Windows 的两处坑。

    Claude0
  2. 02

    Claude Code 自定义斜杠命令与 Skill 实战:从零写一个「生成更新日志」的 /release-notes,含传参、预执行命令和调试

    概念看过了,还是不知道从哪下手?本文按 Claude Code 官方「Extend Claude with skills」写一个完整可用的例子:用 /release-notes 根据 git 记录生成更新日志,覆盖目录、frontmatter、传参、预执行命令、预授权和调试。

    Claude0
  3. 03

    Claude Code 部署网站:先写 Dockerfile 和 compose 在本机跑通,再按清单上云服务器,别让它直接改线上

    想让 Claude Code 帮你把网站部署到云服务器。本文只写通用做法,按 Docker 官方文档讲:让它写 Dockerfile、.dockerignore 和 compose,在本机跑通,端口和数据卷怎么设,再给出上线清单,并说明为什么不要让它直接动线上机器。

    Claude0
  4. 04

    Claude Code 写爬虫与数据清洗:先查 robots.txt 和网站条款,控制频率,原始数据留一份再清洗

    想让 Claude Code 写爬虫抓数据再清洗。本文先讲合规:robots.txt 不是授权也不是安全措施、网站条款要自己读;再讲怎么用 Python 标准库检查规则、小样本先试、保存原始数据,以及用 pandas 清洗,附四段提示词。

    Claude0
  5. 05

    Claude Code 写 Chrome 扩展:按 Manifest V3 起步,加载未打包的扩展,改了哪些文件要重新加载

    想让 Claude Code 帮你写一个 Chrome 扩展。本文按 Chrome 官方扩展文档讲:manifest.json 的最小写法、在 chrome://extensions 加载未打包的扩展、哪些改动要刷新、怎么看控制台和报错,再给四段提示词,以及权限要尽量少。

    Claude0
  6. 06

    Claude Code 写安卓 App:Android Studio 建项目、让它用 gradlew 编译安装,报错和日志怎么喂给它

    想让 Claude Code 帮你写安卓 App。官方文档没有专门的安卓教程,本文把 Claude Code 官方工作流和安卓官方命令行文档拼在一起:Android Studio 建项目、gradlew 编译安装、模拟器和真机、测试与日志,附四段提示词。

    Claude0

同产品的其他教程

  1. 01

    Claude Code 用数据库 MCP 查数据、出报表:只读账号、先看口径再看数字,结果别一次拉太多行

    想用自然语言让 Claude Code 查数据库、出统计报表,而不是写后端接口。本文按官方 MCP 页面和 DBHub 说明讲:怎么连 PostgreSQL、MySQL、SQLite、输出太大怎么办、怎么让它先说明口径、怎么核对数字,附三段提示词。

    Claude0
  2. 02

    Claude Code 配 Figma MCP 还原设计稿:插件或一条命令安装,复制图层链接,小块小块地让它出代码

    想让 Claude Code 照 Figma 设计稿写前端代码。本文按 Figma 官方开发者文档讲:远程服务器地址、插件和手动两种安装、怎么复制图层链接、为什么要选小块、座位类型与调用次数限制,并给三段还原设计稿的提示词。

    Claude0
  3. 03

    Claude Code 管理 GitHub issue:用 gh 命令还是 GitHub MCP,怎么装、怎么限权、怎么让它分拣和回复 issue

    让 Claude Code 读 issue、分拣标签、起草回复、关联 PR,有两条路:装好 gh 命令行直接用,或连 GitHub 官方 MCP 服务器。本文按两边官方文档讲安装命令、令牌权限、只读模式,并给出三段分拣提示词和限权设置。

    Claude0
  4. 04

    Claude Code 配 Playwright MCP 做浏览器测试:一条命令安装,让它打开页面、点按钮、读控制台,再把流程写成测试

    想让 Claude Code 自己打开浏览器测试你的网页。本文按微软 Playwright MCP 官方仓库和 Claude Code 官方 MCP 文档讲:安装命令、怎么确认连上、有头无头与隔离参数、一次测试的提示词,以及它不是安全边界这件事。

    Claude0
  5. 05

    Claude Code 写文档、README 和代码注释:先让它读代码再动笔,指定风格,写完逐条核对命令能不能跑

    想让 Claude Code 给项目补 README、接口文档和注释,又怕它编造不存在的命令和参数。本文按官方「Handle documentation」工作流讲:先找没有文档的代码、指定风格、写完核对,附四段可复制提示词和验证办法。

    Claude0
  6. 06

    用 Claude Code 整理电脑文件、批量重命名、处理表格:先出清单再执行,副本操作和权限设置

    Claude Code 不只能写代码,官方说它能在任何文件夹里搜索、编辑和整理内容。本文讲非程序员怎么用它整理下载文件夹、批量重命名、处理表格:先出整理清单、用副本操作、权限怎么设,附四段提示词和撤销办法。

    Claude0

0 条评论

登录 后参与评论

还没有评论,来抢沙发~