当前位置: 首页 > 知识库问答 >
问题:

如何设置PS1,使git和conda都可以在bash中显示?

诸葛阳成
2023-03-14

我的. 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后,激活env来切换我的conda env。它得到一个BUG,无论我运行什么命令,总是在命令末尾显示当前的conda env名称output.like:

(base) /.../MyCode/python [master]
$ls code_study keras mxnet my_tools其他 pyqt5 pytorch qt_diankeyuan测试窗口代码
(base)

共有1个答案

赫连华皓
2023-03-14

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

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

并将它移到< code >的Conda管理部分之前。bashrc。接下来,将Conda配置变量< code>env_prompt设置为您想要的值:

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

您可以在描述< code > conda config-describe env _ prompt 中了解有关可模板化变量的更多信息。

这与你定义的行为背道而驰的唯一方法是,当没有envs处于活动状态时,你不会得到额外的换行符,但希望你能忍受这一点。另一个缺点是 Conda 只允许预处理。

顺便说一句,您的git_branch函数将在不在存储库中时发出到 stderr,因此您可能希望转移该函数,以便它不会命中您的会话。例如

# show git branch                                                                                                                                      
git_branch() {
    git symbolic-ref HEAD --short 2> /dev/null
}
 类似资料:
  • 我正在努力学习git。 我的git存储库在Visual Studio Team Services上。我在Visual Studio中编码。我使用git bash。 我想通过命令行使用git(我想了解正在发生的事情)。 首先,我从Web浏览器在TFS上创建了一个新的git项目。我确实设置了ssh,这样我就可以从git bash执行命令。它起作用了。 > 当您在TFS中创建git项目时,它是在服务器上

  • 我已经安装了 console2 和 git bash,我的目标是让 git bash 使用选项卡,我已经将控制台设置的目标路径更改为。当我打开控制台时,它不再为我提供选项卡选项。

  • 通过运行在Git Bash(mingw64)中激活我的conda环境时,我注意到一些奇怪的变化。 例如: > < Li > < p > < code > ls-l 命令相当于< code>ls 我无法查看每个文件的权限或所需的任何其他信息 在激活我的conda环境后,在基本环境中工作的Bash脚本不再工作 像使用 运行循环这样简单的事情是行不通的 将日期时间转换为整数日期的命令不再有效 激活一个

  • 我在D:中安装了git,但是我的VSCODE在C:中,当我试图将Git bash设置为缺省值时,它没有显示出来。我该怎么办?

  • 我正在尝试使用杰克逊在json和java对象之间轻松转换。所以我在我的项目中导入了三个罐子 杰克逊注释,杰克逊数据绑定和杰克逊核心。但是,当我在类中编写对象映射器时,它仍然无法识别它。 人员 ob = 新的对象映射器().readValue(内容,人员.class);在这里,对象映射器始终带有红色下划线。我试图手动导入一些东西,仍然什么都没有。

  • 我遇到了与Python相同的问题,无法在git bash的命令行中工作,在Git Bash中,当我键入时,它就挂起来了。 但是,键入非常有效。 什么是winpty?为什么上面的命令有用?