【发布时间】:2016-12-20 02:27:45
【问题描述】:
最近,我尝试了我的 zsh,在我尝试 virtualevn 和 virtualenvwrapper 之前,一切看起来都不错。当我激活一个 virtualenv(例如测试)时,在普通 bash 上,我会看到 virtualenv 名称如下:
(test)abc@abc:
但是当我切换到 zsh 时,我看不到 virtualenv 名称。尽管如此,我还是在 oh my zsh 的插件中添加了 virtualenv 和 virtualenvwrapper。我还检查了我的 virtualenv 的激活文件,它包含:
f [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then
_OLD_VIRTUAL_PS1="$PS1"
if [ "x" != x ] ; then
PS1="$PS1"
else
PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1"
fi
export PS1
fi
是因为比较 ["x" != x] 返回 true 吗?
更新: 我试图在激活文件中回显 $PS1,得到了这个:
(test) %{$fg[magenta]%}%n%{$reset_color%}%{$fg[cyan]%}@%{$reset_color%}%{$fg[yellow]%}%m%{$reset_color%}%{$fg[red]%}:%{$reset_color%}%{$fg[cyan]%}%0~%{$reset_color%}%{$fg[red]%}|%{$reset_color%}%{$fg[cyan]%}⇒%{$reset_color%}
似乎 $PS1 是正确的,但是当我在终端中回显 $PS1 时,(测试)消失了。似乎 $PS1 被其他东西覆盖了!
【问题讨论】:
-
[ "x" != x ]总是返回 false;它将文字x与自身进行比较。 -
那么,为什么 basename 没有放在 $PS1 前面?
-
提示是否以
()开头?请注意,您不需要\-转义"字符。在\"$VIRTUAL_ENV\"(虽然它不应该受到伤害)。 -
为什么它在 bash 上运行良好,但在 zsh 下却失败了?这两者之间的 sh 语法有什么不同吗?
-
使用您向我们展示的代码,我不认为会有什么不同。您能否将其缩减为 MCVE (Minimal, Complete, and Verifiable Example) 并包含确切的症状?