【问题标题】:How to set PS1 that make both git and conda can show in the bash?如何设置使 git 和 conda 都可以在 bash 中显示的 PS1?
【发布时间】:2019-11-21 11:02:48
【问题描述】:

我的 .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 看起来像:

(基础)/.../MyCode/python [master]$

但是在我运行 conda activate env 来切换我的 conda env 之后。它得到一个BUG,无论我运行什么命令,总是在命令输出的末尾显示当前的conda env名称。像这样:

(基础)/.../MyCode/python [master]$ls
code_study keras mxnet my_tools other pyqt5 pytorch qt_diankeyuan 测试windows代码
(基础)

如果我想让 conda env 名称不总是显示在每个命令输出的末尾,我应该怎么做?

【问题讨论】:

  • 不相关,抱歉,但是将 PS1 设置为 $ 以外的任何值有什么好处?
  • @oguzismail 许多人使用提示来显示他们认为相关的上下文,例如他们在哪个主机上(很多人登录到很多地方,需要快速找出他们在说@之前的位置987654326@) 或他们在中间,以及一天中的时间等。
  • @manv 当然,感谢您的反馈;重新打开。

标签: bash git anaconda ps1


【解决方案1】:

我建议让 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 中阅读更多关于可模板化变量的信息。

这与您定义的行为不同的唯一方法是,当没有 env 处于活动状态时,您将不会获得额外的换行符,但希望您可以忍受。另一个缺点是 Conda 只允许前置。


顺便说一句,您的git_branch 函数将在不在回购中时发送到stderr,因此您可能希望转移它以使其不会影响您的会话。例如,

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

【讨论】:

  • 我的.bashrc 中没有“Conda 管理的部分”
  • @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,但感觉不太对劲)。
  • 使用 zsh 可以工作吗?
猜你喜欢
  • 2020-12-22
  • 2014-08-09
  • 1970-01-01
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-28
  • 2012-01-26
相关资源
最近更新 更多