知道为什么我无法在我的提示中显示特定的环境变量吗?

知道为什么我无法在我的提示中显示特定的环境变量吗?

我想在 ZSH 提示符中列出我的 Python 虚拟环境的名称,但我无法让它工作。它被列为环境变量 (VIRTUAL_ENV)。我已经设置了另一个脚本,该脚本正确地返回我的虚拟环境 (envTest) 的基本名称,但尝试将其合并到我的提示符中也不起作用。

提示配置:

PROMPT="╭─${user_host} ${current_dir} [${VIRTUAL_ENV}] ${rvm_ruby} ${git_branch}
╰─%B${user_symbol}%b "

安慰:

╭─user@server ~/Projects/virtualenvTest []
╰─$ echo $VIRTUAL_ENV

╭─user@server ~/Projects/virtualenvTest []
╰─$ source envTest/bin/activate
╭─user@server ~/Projects/virtualenvTest []
╰─$ echo $VIRTUAL_ENV
/home/user/Projects/virtualenvTest/envTest

我可以让其他环境变量显示在我的提示中(例如 LANG)。

提示配置:

PROMPT="╭─${user_host} ${current_dir} [${LANG}] ${rvm_ruby} ${git_branch}
╰─%B${user_symbol}%b "

安慰:

╭─user@server ~/Projects/virtualenvTest [en_US.UTF-8]
╰─$ echo $LANG
en_US.UTF-8

答案1

如果您在定义时实际使用了双引号,PROMPT那么其中的所有参数都会在定义时被替换,而不是每次打印提示时都被替换。您可以通过使用$VIRTUAL_ENV不同的引号来防止这种情况。

由于将整个提示放在单引号中以防止替换$VIRTUAL_ENV可能会破坏提示的其余部分,请尝试$通过在前面添加一个来引用\,如下所示

PROMPT="╭─${user_host} ${current_dir} [\${VIRTUAL_ENV}] ${rvm_ruby} ${git_branch}
╰─%B${user_symbol}%b "

我怀疑其他参数之所以有效,是因为它们被替换为每次都会被评估的内容。例如,${user_host}可能被替换为至少包含提示转义符%n且中间%m包含的内容。@

${LANG}有效,因为当您设置提示时它已经包含了预期值。

您可以通过运行以下命令轻松确认这一点:

echo $PROMPT

相关内容