如何设置PS1,以便在bash中同时显示git和conda?

5

My .bashrc:

# show a short way
shortwd() {
    num_dirs=3
    pwd_symbol="..."
    newPWD="${PWD/#$HOME/~}"
    if [ $(echo -n $newPWD | awk -F '/' '{print NF}') -gt $num_dirs ]; then
        newPWD=$(echo -n $newPWD | awk -F '/' '{print $1 "/.../" $(NF-1) "/" $(NF)}')
    fi
    echo -n $newPWD
}
# show git branch
git_branch() {
   git symbolic-ref HEAD --short
}

export PS1='\n$CONDA_PROMPT_MODIFIER\e[38;5;211m$(shortwd)\e[38;5;48m [$(git_branch)]\e[0m$'

现在的bash看起来像这样:

(base) /.../MyCode/python [master]$

但是当我运行conda activate env切换到我的conda环境后,会出现一个问题,无论我运行什么命令,命令输出的末尾总是显示当前的conda环境名称,就像这样:

(base) /.../MyCode/python [master]$ls
code_study keras mxnet my_tools other pyqt5 pytorch qt_diankeyuan test windowsCode
(base)

如果我想让conda环境名称不总是显示在每个命令的末尾,该怎么办? enter image description here

对不起,这与编程无关,但是将PS1设置为除$以外的其他值有什么好处? - oguz ismail
2
@oguzismail 许多人使用提示来显示他们认为相关的上下文,比如他们在哪个主机上(许多人登录到许多地方,需要快速找出自己在哪里,然后再执行 rm -rf /*),或者他们正在做什么,以及当前时间等。 - tripleee
@manv 当然,感谢您的反馈;已重新开放。 - tripleee
1个回答

6
我建议让Conda处理自己修改PS1的部分,并使用您漂亮的自定义bash函数来处理其他部分。为此,我将更改PS1

export PS1='\e[38;5;211m$(shortwd)\e[38;5;48m [$(git_branch)]\e[0m$'

并将此移至您的.bashrc Conda 管理部分之前。 接下来,设置 Conda 配置变量env_prompt 为所需内容:

conda config --set env_prompt "\n({default_env}) "

您可以在 conda config --describe env_prompt 的描述中了解更多关于可模板化变量的内容。

与您定义的行为不同之处在于当没有活动环境时,您将无法获得额外的换行符,但希望您能接受这一点。另一个缺点是Conda只允许前置。


顺便提一下,当不在仓库中时,您的 git_branch 函数会发出 stderr,因此您可能需要将其转移,以避免影响您的会话。例如:

# show git branch                                                                                                                                      
git_branch() {
    git symbolic-ref HEAD --short 2> /dev/null
}

1
我的.bashrc中没有“Conda-managed section”。 - rkedge
2
@rkedge,我~/.bashrc的相关部分从# >>> conda initialize >>>开始,接着很快出现了__conda_setup,最后以# <<< conda initialize <<<结尾。当我将这部分代码移到~/.bashrc中任何PS1内容之后时,解决了我遇到的$PS1问题。你可能需要查看~/.bash_profile~/.bash_login或者类似于~/.profile~/.login的文件。如果那里没有找到相关内容,则需要查看/etc/目录下的文件,例如/etc/bashrc/etc/profilePS1内容应该在~/.bashrc中(也许在/etc/bashrc中,但感觉不太对)。 - bballdave025
这个在 zsh 中可行吗? - Carlos Ortiz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接