我发现这个帖子这完美地描述了我遇到的问题。唯一的区别是我使用的是 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
存储的路径的 ail $CONDA_DEFAULT_ENV
,并且是一种比必须生成一个执行外部basename
实用程序并通过类似管道读取其输出的新进程更有效、更可靠的方法$(basename $CONDA_DEFAULT_ENV)
(应该有)确实"$(basename -- "$CONDA_DEFAULT_ENV")"
如此。