내가 찾은이 게시물이것은 내가 겪고 있는 문제를 완벽하게 설명합니다. 유일한 차이점은 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_ENV
basename
$(basename $CONDA_DEFAULT_ENV)
"$(basename -- "$CONDA_DEFAULT_ENV")"