法禁區(qū)、stderr 重定向陷阱與文件編碼實(shí)踐)
文檔提示工程人工智能【免費(fèi)下載鏈接】claude-code-system-promptsAll parts of Claude Codes system prompt, 27 builtin tool descriptions, sub agent prompts (Plan/Explore/Task), utility prompts (CLAUDE.md, compact, statusline, magic docs, WebFetch, Bash cmd, security review, agent creation). Updated for each Claude Code version.項(xiàng)目地址https://gitcode.com/gh_mirrors/cl/claude-code-system-prompts點(diǎn)擊查看免費(fèi)下載本篇技術(shù)指南基于 Claude Code System Prompts 倉(cāng)庫(kù)中的 system-prompt-powershell-edition-for-5-1.md深入講解 Claude Code 在 Windows PowerShell 5.1powershell.exe環(huán)境下運(yùn)行時(shí)注入給 Agent 的兼容性規(guī)則哪些 PowerShell 7 語(yǔ)法在 5.1 中會(huì)直接解析報(bào)錯(cuò)、為何對(duì)原生可執(zhí)行程序重定向 stderr 會(huì)引發(fā)NativeCommandError假失敗、以及不同寫文件命令之間編碼默認(rèn)值的差異。讀完本文你將掌握在 5.1 環(huán)境下寫出零解析錯(cuò)誤、零假失敗、編碼正確的 PowerShell 命令的完整實(shí)戰(zhàn)方案。背景為什么 Claude Code 需要按版本區(qū)分的 PowerShell 提示Claude Code 的系統(tǒng)提示并非單一字符串而是由大量按環(huán)境條件注入的片段拼裝而成見(jiàn) README.md。其中與 shell 工具相關(guān)的提示會(huì)根據(jù)探測(cè)到的 PowerShell 版本動(dòng)態(tài)切換倉(cāng)庫(kù)中存有三份互為補(bǔ)充的版本化提示文件適用場(chǎng)景system-prompt-powershell-edition-for-5-1.md檢測(cè)到 Windows PowerShell 5.1powershell.exesystem-prompt-powershell-edition-for-7.md檢測(cè)到 PowerShell 7pwshsystem-prompt-powershell-edition-unknown.md版本未知按 5.1 兼容性保守處理三份文件在 README.md 中均有登記。從 CHANGELOG.md 可以確認(rèn)演進(jìn)脈絡(luò)5.1 版本提示最初于某次發(fā)布中新增見(jiàn) changelog 第 2637 行 NEW:System Prompt: PowerShell edition for 5.1隨后在第 1251 行被修正——Corrects file-encoding guidance to distinguish UTF-8 output from,, andOut-Filefrom the system-codepage defaults ofSet-ContentandAdd-Content即把編碼指導(dǎo)細(xì)化為重定向運(yùn)算符與Out-File默認(rèn) UTF-8而Set-Content/Add-Content默認(rèn)系統(tǒng) ANSI 代碼頁(yè)的精確表述。這說(shuō)明該提示本身就是踩坑經(jīng)驗(yàn)沉淀的產(chǎn)物。unknown版本則體現(xiàn)了向下兼容原則當(dāng) Claude Code 無(wú)法確認(rèn) PowerShell 版本時(shí)直接按 5.1 的語(yǔ)法子集約束 Agent禁止使用任何 7 專屬語(yǔ)法避免在最壞情況下產(chǎn)生解析錯(cuò)誤見(jiàn) system-prompt-powershell-edition-unknown.md。PowerShell 5.1 的語(yǔ)法禁區(qū)7 專屬運(yùn)算符的解析錯(cuò)誤Windows PowerShell 5.1 基于 .NET Framework其語(yǔ)言解析器不支持 PowerShell 7pwsh引入的一批管道鏈/空值安全運(yùn)算符。5.1 提示明確列出四類不可用語(yǔ)法管道鏈運(yùn)算符與||在 5.1 中直接觸發(fā) parser error。三元運(yùn)算符?:不可用??蘸喜⑦\(yùn)算符??不可用??諚l件運(yùn)算符?.不可用。對(duì)比 system-prompt-powershell-edition-for-7.md 可以看到這些語(yǔ)法在 7 中全部可用且行為與 bash 一致5.1 提示因此把它們稱為PowerShell 7 onlyunknown 版本 的原話。條件串聯(lián)命令的正確替代寫法的語(yǔ)義是僅當(dāng)前一條命令成功時(shí)才執(zhí)行后一條。5.1 下用自動(dòng)化變量$?等價(jià)實(shí)現(xiàn)# 等價(jià)于 bash 的 A B僅當(dāng) A 成功時(shí)才運(yùn)行 B A; if ($?) { B } # 無(wú)條件串聯(lián)等價(jià)于 bash 的 A; B A; B$?保存最近一條命令的執(zhí)行狀態(tài)這一點(diǎn)在 tool-description-powershell.md 的退出碼章節(jié)中也有呼應(yīng)-ErrorAction SilentlyContinue雖然抑制了錯(cuò)誤輸出但 cmdlet 失敗仍會(huì)使工具以 exit 1 報(bào)告只有將其提升為終止錯(cuò)誤并吞掉才能讓失敗真正不致命try { Cmdlet ... -ErrorAction Stop } catch {}這與$?的語(yǔ)義相互印證在 5.1 中判斷命令成敗必須顯式檢查$?不能依賴 stderr 是否產(chǎn)生輸出??罩蹬袛嗟奶娲鷮懛??與?.分別對(duì)應(yīng)空值回退與空值安全訪問(wèn)5.1 下要求用顯式$null -eq比較和if/else替代# 等價(jià)于 $value ?? default $result if ($null -eq $value) { default } else { $value } # 等價(jià)于 $obj?.Property $prop if ($null -eq $obj) { $null } else { $obj.Property }注意提示特意寫作$null -eq而非$value -eq $null當(dāng)$value是數(shù)組時(shí)$value -eq $null會(huì)按過(guò)濾器語(yǔ)義返回?cái)?shù)組而非布爾值把$null放在左側(cè)才是穩(wěn)妥的比較方式。陷阱一對(duì)原生可執(zhí)行程序執(zhí)行21會(huì)制造假失敗5.1 提示中分量最重的一條是Avoid21on native executables. In 5.1, redirecting a native commands stderr inside PowerShell wraps each line in an ErrorRecord (NativeCommandError) and sets$?to$falseeven when the exe returned exit code 0. stderr is already captured for you — dont redirect it.原理拆解在 Windows PowerShell 5.1 中21會(huì)把原生程序git、npm、docker 等 exe的 stderr 輸出包裝成NativeCommandError類型的ErrorRecord。這帶來(lái)兩個(gè)連鎖后果$?被置為$false即使 exe 實(shí)際以退出碼 0 成功結(jié)束$?仍報(bào)告失敗導(dǎo)致if ($?)判斷失真輸出被污染stderr 的每一行都被裹進(jìn)錯(cuò)誤記錄而非普通文本流進(jìn)一步混淆對(duì)命令結(jié)果的判斷。值得強(qiáng)調(diào)的是Claude Code 的 PowerShell 工具本身已經(jīng)自動(dòng)捕獲 stderr——tool-description-powershell.md 在 Unix 命令對(duì)照表中對(duì)2/dev/null的對(duì)應(yīng)寫法給出2$null并注明 but stderr is captured for you — usually unnecessary。也就是說(shuō)在 Claude Code 環(huán)境中任何21都是多余的直接丟棄即可。若確需靜默 stderr用2$null而非21。這也解釋了為何 system-prompt-powershell-edition-for-7.md 中完全沒(méi)有這條禁令——PowerShell 7 已不再把原生 stderr 包裝成 ErrorRecord。陷阱二寫文件命令的編碼默認(rèn)值并不統(tǒng)一5.1 提示給出的編碼規(guī)則表面矛盾、實(shí)則精確、重定向運(yùn)算符與Out-File通常默認(rèn) UTF-8帶 BOMSet-Content/Add-Content仍默認(rèn)系統(tǒng) ANSI 代碼頁(yè)例如簡(jiǎn)體中文 Windows 的 GBK/CP936。因此當(dāng)寫出的文件需要被其他工具讀取跨進(jìn)程、跨平臺(tái)、被 git 追蹤時(shí)必須顯式傳遞-Encoding utf8# 推薦顯式指定 UTF-8避免 ANSI 亂碼 Set-Content -Path out.txt -Value $content -Encoding utf8 Add-Content -Path log.txt -Value $line -Encoding utf8 Out-File -FilePath out.txt -InputObject $content -Encoding utf8對(duì)比 7 版本 Default file encoding is UTF-8 without BOM5.1 的編碼行為明顯更碎片化這正是該提示在 CHANGELOG.md 中被專門修正的原因。CLAUDE.md 側(cè)同樣存在相關(guān)約束tool-description-powershell.md 明確要求文件寫入優(yōu)先使用專用 Write 工具而非Set-Content/Out-File編碼陷阱正是這一約束的底層動(dòng)機(jī)之一。陷阱三ConvertFrom-Json返回 PSCustomObject 而非哈希表5.1 中ConvertFrom-Json的默認(rèn)輸出類型是PSCustomObject不支持-AsHashtable參數(shù)該參數(shù)是 PowerShell 6 才引入的。這會(huì)影響后續(xù)的屬性訪問(wèn)方式# 5.1 下解析 JSON得到 PSCustomObject用點(diǎn)號(hào)訪問(wèn)屬性 $obj ConvertFrom-Json {name: claude, tags: [shell, prompt]} $obj.name # 正常 $obj.tags[0] # 正常 # 7 才可用的寫法在 5.1 中會(huì)直接報(bào)錯(cuò) # $hash ConvertFrom-Json -InputObject $json -AsHashtable如需鍵值對(duì)語(yǔ)義5.1 下應(yīng)改為顯式轉(zhuǎn)換例如用$obj.PSObject.Properties遍歷或?qū)?JSON 結(jié)果逐個(gè)寫入哈希表。$null -eq判斷配合屬性訪問(wèn)即可安全探測(cè)字段是否存在與前述空值判斷規(guī)則一致。結(jié)合工具描述5.1 環(huán)境下完整命令編寫守則5.1 版本提示是 tool-description-powershell.md 的組成部分——后者在變量清單中聲明了RENDER_POWERSHELL_EDITION_GUIDANCE_FN與POWERSHELL_EDITION運(yùn)行時(shí)按探測(cè)到的版本把對(duì)應(yīng) edition 提示渲染進(jìn)工具描述。因此5.1 環(huán)境下編寫命令時(shí)應(yīng)同時(shí)遵守以下來(lái)自工具描述的配套規(guī)則語(yǔ)法層5.1 專屬轉(zhuǎn)義符是反引號(hào)而非反斜杠變量用$前綴字符串插值寫作Hello $name或Hello $($obj.Property)環(huán)境變量讀取用$env:NAME設(shè)置用$env:NAME value不要用 bash 的export或Set-Variable帶空格的原生程序路徑要用調(diào)用運(yùn)算符 C:\Program Files\App\app.exe arg1 arg2注冊(cè)表訪問(wèn)使用 PSDrive 前綴HKLM:\、HKCU:\不能寫裸的HKEY_LOCAL_MACHINE\...。Unix 命令對(duì)照5.1 無(wú)這些命令head/tail→Get-Content file -TotalCount N/-Tail N管道場(chǎng)景用Select-Object -First N/-Last Nwhich→(Get-Command name).Source2/dev/null→2$null且通常根本不需要——stderr 已被工具捕獲bash 的控制流語(yǔ)法if [ -f x ]、for x in *、反引號(hào)命令替換在 PowerShell 中是 parser error要用if (Test-Path x)、foreach ($x in ...)、$(cmd)替代。多行字符串向 git commit 等原生程序傳多行內(nèi)容時(shí)使用單引號(hào) here-string...字面量、不展開(kāi)$與反引號(hào)且收尾的必須頂格獨(dú)占一行縮進(jìn)會(huì)解析報(bào)錯(cuò)。若參數(shù)含-、等被 PowerShell 當(dāng)作運(yùn)算符的字符用停止解析令牌--%繞過(guò)。交互與阻塞工具以-NonInteractive運(yùn)行、stdin 掛接 null 設(shè)備因此 5.1 下禁止使用Read-Host、Get-Credential、Out-GridView、pauseRemove-Item等破壞性 cmdlet 需加-Confirm:$false防止等待確認(rèn)。睡眠與等待配套的 system-prompt-avoiding-unnecessary-sleep-commands-part-of-powershell-tool-description.md 要求避免不必要的Start-Sleep——命令能立即運(yùn)行就直接運(yùn)行長(zhǎng)任務(wù)改用run_in_background并在完成時(shí)接收通知不要用 sleep 循環(huán)重試失敗命令確需輪詢外部進(jìn)程時(shí)先用檢查命令而非先睡必須 sleep 時(shí)保持短時(shí)長(zhǎng)。Git 安全遵循 tool-description-powershell-git-guidance.md——優(yōu)先新建提交而非 amend執(zhí)行g(shù)it reset --hard、git push --force等破壞性操作前先評(píng)估更安全的替代方案除非用戶明確要求不得跳過(guò) hooks--no-verify或繞過(guò)簽名--no-gpg-sign等hook 失敗應(yīng)定位并修復(fù)根本原因。速查表5.1 與 7 關(guān)鍵差異一覽特性Windows PowerShell 5.1PowerShell 7pwsh/||管道鏈不可用parser error用A; if ($?) { B }可用行為同 bash三元?:、空合并??、空條件?.不可用用if/else$null -eq可用原生程序21產(chǎn)生 NativeCommandError$?變$false禁止使用無(wú)此問(wèn)題文件編碼默認(rèn)值//Out-File通常 UTF-8帶 BOMSet-Content/Add-Content為系統(tǒng) ANSI 代碼頁(yè)需顯式-Encoding utf8UTF-8 無(wú) BOMConvertFrom-Json -AsHashtable不可用返回 PSCustomObject可用版本未知時(shí)按 5.1 語(yǔ)法子集執(zhí)行見(jiàn) unknown 版—小結(jié)在 Claude Code 的 5.1 環(huán)境中寫出無(wú)坑命令本提示的核心價(jià)值在于把 Windows PowerShell 5.1 的靜默陷阱顯式化語(yǔ)法層面把 7 運(yùn)算符擋在門外并給出等價(jià)替代執(zhí)行層面禁止21以避免$?假失敗文件層面區(qū)分重定向與 cmdlet 的編碼默認(rèn)值數(shù)據(jù)層面明確 JSON 解析返回類型。配合 tool-description-powershell.md 提供的 Unix 命令對(duì)照、here-string 規(guī)則、退出碼語(yǔ)義以及 tool-description-powershell-git-guidance.md 的 git 安全約束即可在 5.1 環(huán)境下穩(wěn)定地執(zhí)行 git、npm、docker 等日常終端操作——無(wú)需等待升級(jí)到 pwsh也不必在解析錯(cuò)誤與假失敗之間反復(fù)試錯(cuò)。贊分享文檔提示工程人工智能【免費(fèi)下載鏈接】claude-code-system-promptsAll parts of Claude Codes system prompt, 27 builtin tool descriptions, sub agent prompts (Plan/Explore/Task), utility prompts (CLAUDE.md, compact, statusline, magic docs, WebFetch, Bash cmd, security review, agent creation). Updated for each Claude Code version.項(xiàng)目地址https://gitcode.com/gh_mirrors/cl/claude-code-system-prompts點(diǎn)擊查看免費(fèi)下載相關(guān)推薦Claude Code System Prompts 解析PowerShell 版本未知時(shí)如何編寫兼容 Windows PowerShell 5.1 的命令Claude Code System Prompts 解析PowerShell 版本未知時(shí)如何編寫兼容 Windows PowerShell 5.1 的命令文檔提示工程人工智能ServiceWorker API詳解從ServiceWorkerContainer到ServiceWorkerRegistrationServiceWorker API詳解從ServiceWorkerContainer到ServiceWorkerRegistration ServiceWor文檔/教程網(wǎng)絡(luò)與通信受 Karpathy 啟發(fā)的 Claude Code 行為指南用四大原則根治 LLM 編碼陷阱受 Karpathy 啟發(fā)的 Claude Code 行為指南用四大原則根治 LLM 編碼陷阱 本文基于 README.zh.md https://link.AI 技能提示工程上一篇Middleman中的QUIC協(xié)議提升連接性能下一篇Python性能回歸測(cè)試VizTracer基準(zhǔn)比較功能使用指南創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考