프롬프트에 현재 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")"

관련 정보