Claude CodeのBash toolをzshではなくbashで実行する¶
普段のログインシェルに zsh を使っている環境では、Claude Code の Bash tool からコマンドを実行すると、zsh の初期化処理が原因で失敗することがありました。ターミナルでは zsh を使い続けたいので、Claude Code の Bash tool だけを bash で実行するように変更します。この記事は 2026 年 9 月に試した設定の記録で、Claude Code の正確なバージョンは記録していません。
発生した問題¶
Claude Code の Bash tool は、利用するシェルを次の順で自動検出します。Anthropic の公式ドキュメントも、このシェル選択の挙動を説明しています。
CLAUDE_CODE_SHELLを指定していれば、そのシェルを使う- 指定がなく、
$SHELLが bash または zsh なら、$SHELLの値を使う - それ以外では、zsh、bash の順に利用可能なシェルを探す
普段のログインシェルが zsh の場合、そのままでは Bash tool も zsh で実行される可能性があります。
今回困ったのは、実行したいコマンド自体ではなく zsh の起動処理でした。そのため、コマンドを単純にbash -c '...'で包んでも、Claude Code が先に zsh を起動する構成では問題を避けられません。避けるには、Bash tool が最初に起動するシェル自体を bash へ変えます。
CLAUDE_CODE_SHELLでbashを指定する¶
Claude Code では、CLAUDE_CODE_SHELLに bash のパスを指定できます。
毎回指定したくない場合は、~/.claude/settings.jsonのenvへ設定します。
settings.jsonのenvに書いた環境変数は Claude Code が直接読み込むため、どのシェルから Claude Code を起動しても適用されます。CLAUDE_CODE_SHELLには bash または zsh の実行ファイルを指定でき、無効なパスを指定すると自動検出へフォールバックします。Homebrew などで別の bash を使っている場合は、/opt/homebrew/bin/bashのように実際のパスを指定します。
aliasの確認¶
私の環境では、設定していた alias が Bash tool のコマンドの挙動を変えてしまうこともありました。そこで、CLAUDE_CODE_SHELLを設定した Claude Code の入力欄で! aliasを実行し、Bash tool のシェルに alias が定義されているかを調べました。先頭の!は、入力を Claude への指示ではなくシェルのコマンドとして実行する指定です。その結果、設定していた alias は定義されていませんでした。少なくとも確認した alias の影響は避けられそうです。
まとめ¶
Claude Code の Bash tool で失敗する原因が zsh の起動処理にある場合、コマンドをbash -cで包むだけでは解決しません。ログインシェルは zsh のまま、CLAUDE_CODE_SHELL=/bin/bashで Bash tool のシェルだけを bash へ切り替えます。常用するなら~/.claude/settings.jsonのenvに書いておくと、起動元のシェルに関係なく適用されます。alias を読み込まない点も、少なくとも私の環境では副作用を減らす方向に働きそうです。