如何设置PS1,让git和conda都能在bash中显示?
How to set PS1 that make both git and conda can show in the bash?
我的.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 "/.../" $(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 环境之后。它有一个错误,无论我 运行 什么命令,总是在命令 output.like 的末尾显示当前的 conda env 名称:
(base) /.../MyCode/python [master]$ls
code_study keras mxnet my_tools other pyqt5 pytorch qt_diankeyuan test windowsCode
(base)
如果我想让 conda env 名称不总是显示在每个命令输出的末尾,我应该怎么做?
我建议让 Conda 自己处理修改 PS1
的部分,而对其他部分使用您自定义的 bash 函数。为此,我会将 PS1
更改为
export PS1='\e[38;5;211m$(shortwd)\e[38;5;48m [$(git_branch)]\e[0m$'
并将其移动到 before 您的 .bashrc
的 Conda 管理部分。接下来,将 Conda 配置变量 env_prompt
设置为您想要的值:
conda config --set env_prompt "\n({default_env}) "
您可以在说明 conda config --describe env_prompt
中阅读有关可模板化变量的更多信息。
唯一偏离您定义的行为的方法是,当没有 envs 处于活动状态时,您将不会获得额外的换行符,但希望您可以接受。另一个缺点是 Conda 只允许前置。
顺便说一句,您的 git_branch
函数将在不在回购中时发送到 stderr
,因此您可能希望转移它,以免它进入您的会话。例如,
# show git branch
git_branch() {
git symbolic-ref HEAD --short 2> /dev/null
}
我的.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 "/.../" $(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 环境之后。它有一个错误,无论我 运行 什么命令,总是在命令 output.like 的末尾显示当前的 conda env 名称:
(base) /.../MyCode/python [master]$ls
code_study keras mxnet my_tools other pyqt5 pytorch qt_diankeyuan test windowsCode
(base)
如果我想让 conda env 名称不总是显示在每个命令输出的末尾,我应该怎么做?
我建议让 Conda 自己处理修改 PS1
的部分,而对其他部分使用您自定义的 bash 函数。为此,我会将 PS1
更改为
export PS1='\e[38;5;211m$(shortwd)\e[38;5;48m [$(git_branch)]\e[0m$'
并将其移动到 before 您的 .bashrc
的 Conda 管理部分。接下来,将 Conda 配置变量 env_prompt
设置为您想要的值:
conda config --set env_prompt "\n({default_env}) "
您可以在说明 conda config --describe env_prompt
中阅读有关可模板化变量的更多信息。
唯一偏离您定义的行为的方法是,当没有 envs 处于活动状态时,您将不会获得额外的换行符,但希望您可以接受。另一个缺点是 Conda 只允许前置。
顺便说一句,您的 git_branch
函数将在不在回购中时发送到 stderr
,因此您可能希望转移它,以免它进入您的会话。例如,
# show git branch
git_branch() {
git symbolic-ref HEAD --short 2> /dev/null
}