Skip to content

原文(日本語に翻訳)

ダブルアンダースコアプレフィックスを持つシェル関数(例: __git_ps1)がシェルセッション間で保持されていなかった問題を修正 (anthropics/claude-code#25824)

原文(英語)

Fixed shell functions with double-underscore prefixes (e.g., __git_ps1) not being preserved across shell sessions (anthropics/claude-code#25824)

概要

Bashの慣例では、__git_ps1 のようなダブルアンダースコア(__)で始まる関数名は内部・プライベート関数を示す命名規則です。Claude Codeがシェル環境を管理する際、これらのダブルアンダースコアプレフィックスを持つ関数がセッション間で正しく引き継がれていませんでした。この修正により、__git_ps1 などのGitプロンプト関数やその他のシェルユーティリティ関数が正常に動作するようになります。

基本的な使い方

bash
# 修正前: __git_ps1 などの関数がClaudeのシェルセッションで失われていた
# .bashrc や .zshrc で定義されている場合でも機能しないことがあった

# 修正後: ダブルアンダースコアプレフィックスの関数が正しく保持される
# 例: Gitプロンプトのカスタマイズ
PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '

実践例

Gitプロンプトの設定(__git_ps1)

bash
# ~/.bashrc での __git_ps1 設定例
# git-prompt.sh をソースする(Git for Windowsやgit-promptパッケージに含まれる)
source /usr/share/git-core/contrib/completion/git-prompt.sh

# Gitブランチをプロンプトに表示
GIT_PS1_SHOWDIRTYSTATE=1
GIT_PS1_SHOWSTASHSTATE=1
GIT_PS1_SHOWUNTRACKEDFILES=1
PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '

# 修正後: Claude Codeのシェルセッションでも __git_ps1 が正しく動作する

カスタムダブルアンダースコア関数

bash
# ~/.bashrc でのカスタム関数定義
__my_custom_prompt() {
  echo "(custom)"
}

__check_venv() {
  if [[ -n "$VIRTUAL_ENV" ]]; then
    echo "($(basename $VIRTUAL_ENV))"
  fi
}

PS1='$(__my_custom_prompt)$(__check_venv)\$ '

# 修正後: これらのカスタム関数もClaudeのシェルセッションで保持される

zsh補完関数の保持

zsh
# ~/.zshrc でのダブルアンダースコア関数
__conda_setup() {
  # Conda初期化関数
  eval "$('/usr/local/anaconda3/bin/conda' 'shell.zsh' 'hook' 2>/dev/null)"
}

# 修正後: Claude Codeのシェル環境でも conda 関連の関数が正しく機能する

注意点

  • この修正はv2.1.47以降で有効です
  • __git_ps1git-prompt.sh スクリプトで定義される関数で、多くのGit環境で使用されます
  • ダブルアンダースコアプレフィックスは慣例的にプライベート/内部関数を示しますが、実際には通常の関数です
  • この問題はClaude Codeがシェル環境をエクスポートする際に、__ で始まる関数をスキップしていたことが原因でした
  • シングルアンダースコア(_function_name)の関数は以前から正常に動作していました

関連情報