プロンプトに現在のAnaconda環境を含めるにはどうすればよいですか?

プロンプトに現在のAnaconda環境を含めるにはどうすればよいですか?

私が見つけたこの投稿これは私が経験している問題を完全に説明します。唯一の違いは、zshを使用していることです。 @filbrandenが説明するように '$'をエスケープすると$(basename $CONDA_DEFAULT_ENV)プロンプトに印刷されます。次のタイプは機能しますが、@johnchaseが最初に説明したように、アクティベーションによって更新されません。

PS1=$'\n'"%F{blue}[ %F{green}%n%F{white}@%F{yellow}%m%F{white}:%F{cyan}%d %F{blue}]"$'\n'
PS1+="%F{cyan}("$(basename $CONDA_DEFAULT_ENV)") %F{white}:> "

私にしてください:

(base) :> conda activate datasci

[ downtime@samurai:/home/downtime ]
(base) :>                                                                                                                                                                         [insert]

[ downtime@samurai:/home/downtime ]
(base) :> echo $CONDA_DEFAULT_ENV                                                                                                                                                 [insert]
datasci

次のように変更すると:

PS1=$'\n'"%F{blue}[ %F{green}%n%F{white}@%F{yellow}%m%F{white}:%F{cyan}%d %F{blue}]"$'\n'
PS1+="%F{cyan}(\$(basename \$CONDA_DEFAULT_ENV)) %F{white}:> "

私は得る:

[ downtime@samurai:/home/downtime ]
($(basename $CONDA_DEFAULT_ENV)) :>

zshはPS1を別の方法で処理しますか?私は何を見逃していますか?

答え1

いつものように、質問を投稿して数分で答えを見つけました。答えを調べるために数時間を費やしましたが、そうです。答えはそうです。 zshは明らかに全く異なります。この投稿だから私は答えを見つけました。

precmd() {
       psvar[1]=$CONDA_DEFAULT_ENV:t
}
PS1=$'\n'"%F{blue}[ %F{green}%n%F{white}@%F{yellow}%m%F{white}:%F{cyan}%d %F{blue}]"$'\n'
PS1+="%F{cyan}(%1v) %F{white}:> "

保存されたパスの全体$CONDA_DEFAULT_ENV:tに拡張される(cshから)も参照してください。外部ユーティリティを実行し、そのようなパイプを介して出力を読み取る新しいプロセスを作成するよりも効率的で信頼性の高いアプローチです。 。t$CONDA_DEFAULT_ENVbasename$(basename $CONDA_DEFAULT_ENV)"$(basename -- "$CONDA_DEFAULT_ENV")"

関連情報