Skip to content

原文(日本語に翻訳)

PowerShell の git diff/git grepegrep/fgrep、および | を含む引用符付き検索パターンが、exit code 1 で終了した際に失敗として報告される問題を修正し、Bash と同じ挙動に統一

原文(英語)

Fixed PowerShell git diff/git grep, egrep/fgrep, and quoted search patterns containing | being reported as failures when they exit 1, matching Bash behavior

概要

Windows の PowerShell 環境で git diffgit grepegrep/fgrep、あるいは |(パイプ文字)を含む引用符付き検索パターンを実行した際、これらのコマンドが exit code 1 で終了すると Claude Code が誤って「コマンド失敗」として報告してしまうバグが修正されました。grep 系コマンドや diff では exit code 1 は「マッチなし」「差分なし」を意味する正常終了であり、Bash ではこれまでも正しく扱われていましたが、PowerShell 環境ではこの慣習が反映されておらず失敗扱いになっていました。今回の修正で PowerShell でも Bash と同一の挙動になります。

基本的な使い方

この修正はClaude Code内部のコマンド実行結果の解釈ロジックに対するものであり、ユーザー側で設定を変更する必要はありません。Windows上でPowerShellをデフォルトシェルとして使っている場合、自動的に修正後の挙動が適用されます。

powershell
# PowerShell環境でのgit diff実行例
git diff HEAD~1 HEAD

# 差分がない場合 exit code は 1 だが、修正後はエラー扱いされない
echo $LASTEXITCODE

実践例

Windows上でgit diffの差分有無をチェックする

CIスクリプトやフック処理で「差分があるかどうか」を判定する際、git diff --exit-code は差分がない場合に exit code 0、差分がある場合に exit code 1 を返します。

powershell
git diff --exit-code

# 修正前: PowerShellでは exit code 1 が「コマンド失敗」と誤認識され、
#         Claude Codeが本来正常なはずの差分検出操作を失敗として報告していた
# 修正後: exit code 1 は「差分あり」という正常な結果として扱われる

git grepでパターンが見つからない場合

powershell
git grep "TODO:" -- "*.ts"

# マッチが1件も見つからない場合 exit code は 1
# 修正前: 失敗として報告される
# 修正後: 「マッチなし」という正常な結果として扱われる

egrep/fgrepの利用

powershell
# 拡張正規表現でのパターン検索
egrep "error|warning" build.log

# 固定文字列での検索
fgrep "Exception" app.log

# どちらもマッチなしの場合は exit code 1 を返すが、
# 修正後はBashと同様に正常終了として扱われる

パイプ文字を含む検索パターンの利用

powershell
# "|" を含む正規表現パターンを引用符で囲んで検索する場合
git grep "error|warning|fatal" -- "*.log"

# 修正前: パターン中の "|" がPowerShell側のパイプ処理と混同され、
#         exit code 1 のときに失敗として誤報告されることがあった
# 修正後: 引用符内の "|" は検索パターンの一部として正しく扱われ、
#         exit code 1 は「マッチなし」として正常に処理される

注意点

  • grepgit grepegrep/fgrep の exit code は慣習的に「0: マッチあり」「1: マッチなし」「2: エラー(ファイル不存在など)」を意味します。diff/git diff も同様に「0: 差分なし」「1: 差分あり」「2以上: エラー」という慣習に従います。今回の修正はこのUnix系コマンドの慣習をPowerShell環境でも正しく解釈するためのものです。
  • 本修正はexit code 1の解釈に関するものであり、exit code 2以上(実際のエラー)は引き続き失敗として正しく報告されます。
  • Bash環境(macOS/Linux、WSL含む)ではこの問題は発生しておらず、今回の修正はPowerShell固有のものです。
  • PowerShellのデフォルトシェルを使用しているWindowsユーザーに直接関係する修正です。WSLやGit Bashなど別シェルを使っている場合は元々影響を受けていません。

関連情報