Cap*_*ama 6 git bash ps1 anaconda
我的.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$'
Run Code Online (Sandbox Code Playgroud)
现在 bash 看起来像:
(基础)/.../MyCode/python [master]$
但在我跑去conda activate env
切换我的 conda 环境之后。它有一个 BUG,无论我运行什么命令,总是在命令输出的末尾显示当前的 conda env 名称。如下所示:
(基础) /.../MyCode/python [master]$ls
code_study keras mxnet my_tools 其他 pyqt5 pytorch qt_diankeyuan 测试 windowsCode
(基础)
如果我想让 conda 环境名称不总是显示在每个命令输出的末尾,我该怎么办?
我建议让 Conda 处理自己的修改部分PS1
,并为其他部分使用您好的自定义 bash 函数。为此,我将更PS1
改为
export PS1='\e[38;5;211m$(shortwd)\e[38;5;48m [$(git_branch)]\e[0m$'
Run Code Online (Sandbox Code Playgroud)
并将其移至.bashrc
. 接下来,将 Conda 配置变量设置env_prompt
为您想要的内容:
conda config --set env_prompt "\n({default_env}) "
Run Code Online (Sandbox Code Playgroud)
您可以在说明中阅读有关可模板化变量的更多信息conda config --describe env_prompt
。
这偏离您定义的行为的唯一方法是,当没有任何环境处于活动状态时,您将不会获得额外的换行符,但希望您可以接受这一点。另一个缺点是 Conda 只允许前置。
顺便说一句,您的git_branch
函数将在不在存储库中时发出stderr
,因此您可能需要转移它,这样它就不会影响您的会话。例如,
export PS1='\e[38;5;211m$(shortwd)\e[38;5;48m [$(git_branch)]\e[0m$'
Run Code Online (Sandbox Code Playgroud)