![使用 PROMPT_COMMAND 时,Python venv 模块无法将虚拟环境名称添加到 PS1?](https://linux22.com/image/168452/%E4%BD%BF%E7%94%A8%20PROMPT_COMMAND%20%E6%97%B6%EF%BC%8CPython%20venv%20%E6%A8%A1%E5%9D%97%E6%97%A0%E6%B3%95%E5%B0%86%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83%E5%90%8D%E7%A7%B0%E6%B7%BB%E5%8A%A0%E5%88%B0%20PS1%EF%BC%9F.png)
我使用官方 Git Bash 提示符支持来显示当前分支作为提示符的一部分。
我的问题是,使用激活 Python 虚拟环境 ( python -m venv <dir>
)source bin/activate
不会显示虚拟环境名称 - (atlassian-watchdog)
- 作为 Bash 提示符的一部分:
nlykkei:~/projects/atlassian-watchdog (master *)$
我有一种强烈的感觉,它失败了,因为我使用PROMPT_COMMAND
in~/.bashrc
而不是PS1
,但GIT_PS1_SHOWCOLORHINTS
只能与 一起使用PROMPT_COMMAND
。
有没有什么方法可以与 Python 虚拟环境一起使用PROMPT_COMMAND
,以便在激活时将环境名称添加到提示中?
~/.git-prompt.sh:
# 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.
垃圾箱/激活:
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:
# git prompt
source ~/.git-prompt.sh
GIT_PS1_SHOWCOLORHINTS=1
PROMPT_COMMAND='__git_ps1 "\u:\w" "\\\$ "'
答案1
解决方案是将 的相关部分bin/activate
与结合起来~/git-prompt.sh
。
这是一个包装并修改第一个参数以包含虚拟环境的__git_ps1_venv()
函数。__git_ps1()
__git_ps1()
该PS1
变量应设置为提示的格式。
~/.bashrc
:
##################
# 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