首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在终端提示符中修改conda env变量?

如何在终端提示符中修改conda env变量?
EN

Unix & Linux用户
提问于 2018-10-02 23:15:53
回答 2查看 8K关注 0票数 7

我想定制我的终端提示。通常,当conda环境被激活时,环境的名称将被添加到PS1字符串中。我想定制更多的这一点,但一直未能弄清楚。

如果我将changeps1: false添加到.condarc文件中,则在激活新环境时不会修改终端提示符。然后,我可以修改.bash_profile中的环境变量,例如:

PS1+="\[${cyan}\]<$(basename $CONDA_DEFAULT_ENV)> ";

这将返回我希望被胡萝卜包围的环境的名称,但是只有在我运行source .bash_profile激活环境后才能工作,这并不是意料之外的。

我的问题是如何在激活环境时更新提示,或者是否有更好的方法来实现这一点?

这与这个问题有关

然而,这些示例配置文件并没有直接解决我在激活环境时遇到的提示不更改的问题。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2018-10-17 03:18:08

这里的问题是,您使用双引号并使用直接命令替换,这意味着在执行这一行代码时,$(basename $CONDA_DEFAULT_ENV) (以及因此$CONDA_DEFAULT_ENV)的值只会被计算一次,并将作为逐字字符串合并到PS1中。

bash处理PS1的方式是,每次输出提示符时都会对$(...)序列进行计算,因此您需要做的是保留该序列的文字形式(例如,通过用反斜杠转义$s ),这将产生您要寻找的结果。

所以这应该是可行的:

代码语言:javascript
运行
复制
PS1+="\[${cyan}\]<\$(basename \$CONDA_DEFAULT_ENV)> ";

或者,更好的是,在变量周围添加双引号,这样,如果basename命令有空格,或者是空的或未设置的,那么$CONDA_DEFAULT_ENV命令将继续工作:

代码语言:javascript
运行
复制
PS1+="\[${cyan}\]<\$(basename \"\$CONDA_DEFAULT_ENV)\"> ";

请注意,我没有逃脱${cyan},因为只评估一次是可以的,因为它不会改变.

转义元字符(如$")在某个点开始变得越来越重,因此使用单引号逐字保留字符串可能是一个更好的选择,因此我们可以这样做。但是,由于我们仍然希望扩展${cyan},所以让我们将双引号和单引号混合起来,以获得最小转义的预期结果:

代码语言:javascript
运行
复制
PS1+="\[${cyan}\]"'<$(basename "$CONDA_DEFAULT_ENV")> ';

你可能仍然有问题,把颜色设置成青色,而不重置它在最后.但是这应该很容易修复,在代码的末尾添加另一个"\[${...}\]"块来重置格式(不确定颜色常量来自何处,所以请检查重置代码)。但是,在您的特定环境中,如果您有更多的行附加到PS1以进一步修改它,这在您的特定环境中是可能的,这也改变了颜色。(我认为这就是你的情况,因为每当你获取你的个人资料时,你都会说出你所拥有的东西。)

票数 10
EN

Unix & Linux用户

发布于 2022-05-03 16:46:19

扩展一下filbranden的答案,如果您想在没有设置env时避免使用<>,可以这样做:

代码语言:javascript
运行
复制
# CONDA
function parse_conda_env () {
    if [ ! -z "$CONDA_DEFAULT_ENV" ]
    then
        echo "<$(basename "$CONDA_DEFAULT_ENV")> "
    fi
}

# COLORS
BLUE="\[\033[0;34m\]"
RED="\[\033[0;31m\]"
YELLOW="\[\033[0;33m\]"
GREEN="\[\033[0;32m\]"
CYAN="\[\033[0;36m\]"
NO_COLOR="\[\033[0m\]"

PROMPT_DIRTRIM=2
PS1="$CYAN\$(parse_conda_env)$GREEN\h$BLUE:\w$YELLOW\$(parse_git_branch)$NO_COLOR\$ ";
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/472878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档