首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python模块在使用PS1时不能向PROMPT_COMMAND添加虚拟环境名称?

Python模块在使用PS1时不能向PROMPT_COMMAND添加虚拟环境名称?
EN

Unix & Linux用户
提问于 2020-02-29 17:50:37
回答 1查看 692关注 0票数 2

我使用官方的Git Bash提示支持将当前分支显示为提示符的一部分。

我的问题是,使用python -m venv 激活( source bin/activate )并不会将虚拟环境名称(atlassian-watchdog)显示为Bash提示符的一部分:

nlykkei:~/projects/atlassian-watchdog (master *)$

我强烈地感觉到它失败了,因为我在~/.bashrc中使用D5而不是PS1,但是GIT_PS1_SHOWCOLORHINTS只使用PROMPT_COMMAND

是否有任何方法将PROMPT_COMMAND与一起使用,以便在它处于活动状态时将环境名称添加到提示符中?

~/..git提示.

代码语言:javascript
运行
复制
# If you would like a colored hint about the current dirty state, set
# GIT_PS1_SHOWCOLORHINTS to a nonempty value. The colors are based on
# the colored output of "git status -sb" and are available only when
# using __git_ps1 for PROMPT_COMMAND or precmd.

bin/激活

代码语言:javascript
运行
复制
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
    _OLD_VIRTUAL_PS1="${PS1:-}"
    if [ "x(atlassian-watchdog) " != x ] ; then
       PS1="(atlassian-watchdog) ${PS1:-}"
    else
    if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then
        # special case for Aspen magic directories
        # see http://www.zetadev.com/software/aspen/
        PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1"
    else
        PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1"
    fi
    fi
    export PS1
fi

~/..bashrc

代码语言:javascript
运行
复制
# git prompt
source ~/.git-prompt.sh
GIT_PS1_SHOWCOLORHINTS=1
PROMPT_COMMAND='__git_ps1 "\u:\w" "\\\$ "'
EN

回答 1

Unix & Linux用户

发布于 2020-09-24 06:46:55

解决方案是将bin/activate的相关部分与~/git-prompt.sh相结合。

这里,__git_ps1_venv()是一个封装__git_ps1()并修改__git_ps1()的第一个参数以包含虚拟环境的函数。

PS1变量应该设置为提示符的格式。

~/.bashrc

代码语言:javascript
运行
复制
##################
# Prompt
##################

__git_ps1_venv() {
   local pre="$1"
   local post="$2"

   if [ -n "${VIRTUAL_ENV}" ] && [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ]; then
      if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then
         # special case for Aspen magic directories
         # see http://www.zetadev.com/software/aspen/
         pre="[`basename \`dirname \"$VIRTUAL_ENV\"\``] ${pre}"
      else
         pre="(`basename \"$VIRTUAL_ENV\"`) ${pre}"
      fi
   fi

   __git_ps1 "${pre}" "${post}"
}

PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ '

if [[ -r ~/.git-prompt.sh ]]; then
   . ~/.git-prompt.sh

   GIT_PS1_SHOWCOLORHINTS=1
   GIT_PS1_SHOWDIRTYSTATE=1
   GIT_PS1_SHOWSTASHSTATE=1
   GIT_PS1_SHOWUNTRACKEDFILES=1
   GIT_PS1_SHOWUPSTREAM="verbose name"

   PROMPT_COMMAND='__git_ps1_venv "'"${PS1%\\\$ }"'" "\\\$ "'
fi
票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/570419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档