还在 CLAUDE.md 里硬规定 Claude Code 用 pwsh?官方一个 配置直接钉在工具层强制调用

还在 CLAUDE.md 里硬规定 Claude Code 用 pwsh?官方一个 配置直接钉在工具层强制调用
还在 CLAUDE.md 里硬规定 Claude Code 用 pwsh?官方一个 配置直接钉在工具层强制调用

写在前面

中文圈里很多 Windows 用户解决 Claude Code 的 pwsh 适配问题,是在 CLAUDE.md 或全局 prompt 里塞约束 —— “请用 pwsh 不要用 cmd”、“输出 UTF-8”、“不要用反引号转义”。这套办法能用,但是 prompt 层的 workaround:每次启动消耗 token、模型还会忘、对长命令仍然抗不住引号嵌套。

其实 Anthropic 在工具层做了 native 方案,只是没怎么宣传 —— 一个叫 CLAUDE_CODE_USE_POWERSHELL_TOOL 的预览 flag。开了之后 pwsh 是一个独立工具,不再是 shell 字符串拼接。下面把它讲清楚。


CLAUDE_CODE_USE_POWERSHELL_TOOL=1 是什么

PowerShell 工具预览。开启后启动 Claude Code,终端 footer 会出现 Anthropic 的内置提示,说明这是它们的官方预览功能,不是社区魔改。

实际变化:

维度 默认(关) 开启后 调用方式 pwsh -c "..." 包装 原生 pwsh 命令直接调用 中文输出 经常乱码(CP936 默认) 原生 UTF-8(pwsh 7) 引号嵌套 多层转义地狱 大幅减少 长命令 字符串拼接易出错 直接写脚本块

前提是装了 pwsh 7+(不是系统自带的 Windows PowerShell 5.1):

winget install Microsoft.PowerShell

收益最明显的场景

1. 中文项目

文件名带中文 + 内容带中文,默认包装层会把 UTF-8 转成 GBK 再转回来,乱码概率极高。开了之后稳定 UTF-8,再也不用看到 鏂囦欢 这种东西。

2. 带管道和脚本块的命令

跑这类命令:

Get-ChildItem -Recurse | Where-Object { $_.Length -gt 1MB } | Select-Object Name, Length

默认模式下 Claude 会反复试错引号 —— 先用单引号、报错、换双引号、再报错、最后加转义。开了 PowerShell tool 之后一次过,因为它直接把这段当成 pwsh 脚本块送进去,不再经过 shell 字符串拼接。

3. 多行操作

if/elseforeachtry/catch 这类多行结构,默认模式基本写不出来,开了之后 Claude 直接生成原生 pwsh 脚本块。

怎么开

放在 ~/.claude/settings.json

{
  "env": {
    "CLAUDE_CODE_USE_POWERSHELL_TOOL": "1"
  }
}

或者临时试一下,pwsh 里直接:

$env:CLAUDE_CODE_USE_POWERSHELL_TOOL=1
claude

启动后看终端 footer,如果有 PowerShell tool 相关提示就是生效了。


Windows + pwsh 7 用户加这一行收益就到手了,没什么折腾成本。如果你挖到过其他真正有用的 CLAUDE_CODE_* flag,欢迎在评论里贴出来。

2 个帖子 - 2 位参与者

阅读完整话题

来源: LinuxDo 最新话题查看原文