2016-04-06 2 views
0

Wenn ich einen Python virtualenv mit workon aktiviere, ändert sich meine Eingabeaufforderung nicht, um die Umgebung zu identifizieren.Warum ändert sich meine Eingabeaufforderung nicht, wenn ich ein virtualenv aktiviere?

Ich habe bestätigt, dass mein activate Skript

if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then 
    _OLD_VIRTUAL_PS1="$PS1" 
    if [ "x" != x ] ; then 
     PS1="$PS1" 
    else 
     PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1" 
    fi 
    export PS1 
fi 

enthält und dass VIRTUAL_ENV_DISABLE_PROMPT ist nicht gesetzt.

Warum würde das passieren und was kann ich tun, um es zu beheben?


GNU bash, Version 3.2.57 (1) -release (x86_64-Apfel-darwin15)


ich etwas Beinarbeit habe in meinem .bash_profile los ist, aber ich don‘ t warum jeder sollte dies wichtig, wenn die Eingabeaufforderung eingestellt wurde:

declare PSCOLORPATH='\[\e[0;33m\]' 
declare PSCOLORPROMPT='\[\e[1;32m\]' 
declare PSCOLORHOST='\[\e[0;32m\]' 
declare PSCOLOROOT='\[\e[1;31m\]' 
declare PSCOLOREND='\[\e[m\]' 
#echo $PSCOLORPATH 
if [ $SSH_FLAG -eq 1 ] ; then 
    declare PSHOST='\h:' 
else 
    declare PSHOST='' 
fi 
if [ $IS_SU -eq 1 ] ; then 
    PS1_INFO="$PSCOLOROOT[SU] $PSCOLORHOST$PSHOST$PSCOLORPATH\w" 
else 
    PS1_INFO="$PSCOLORHOST$PSHOST$PSCOLORPATH\w" 
fi 
PS1_PROMPT="$PSCOLORPROMPT \\$ $PSCOLOREND" 
declare -x PS1="$PS1_INFO$PS1_PROMPT" 
#declare -x PS1="$PSCOLORHOST$PSHOST$PSCOLORPATH\w $PSCOLORPROMPT\\$ $PSCOLOREND" 
declare -x PS2="$PSCOLORPROMPT> $PSCOLOREND" 
declare -x PS4="$PSCOLORPROMPT+ $PSCOLOREND" 

source $(brew --repository)/etc/bash_completion.d/git-prompt.sh 

GIT_PS1_HIDE_IF_PWD_IGNORED=1 
PS1_NORMAL=$PS1 
_gitprompt() { 
    if [ "$1" = "off" ]; then 
     GIT_PS1_SHOWUPSTREAM=; GIT_PS1_SHOWDIRTYSTATE=; GIT_PS1_SHOWUNTRACKEDFILES=; GIT_PS1_SHOWCOLORHINTS=; 
     PS1="$PS1_NORMAL"; PROMPT_COMMAND=; 
    else 
     if [ "$1" = "verbose" ]; then 
      GIT_PS1_SHOWUPSTREAM="auto"; GIT_PS1_SHOWDIRTYSTATE=1; GIT_PS1_SHOWUNTRACKEDFILES=1; GIT_PS1_SHOWCOLORHINTS=; 
      PROMPT_COMMAND='__git_ps1 "$PS1_INFO" "$PS1_PROMPT"';   
     elif [ "$1" = "color" ]; then 
      GIT_PS1_SHOWUPSTREAM=; GIT_PS1_SHOWDIRTYSTATE=; GIT_PS1_SHOWUNTRACKEDFILES=; GIT_PS1_SHOWCOLORHINTS=1; 
      PROMPT_COMMAND='__git_ps1 "$PS1_INFO$PSCOLOREND" "$PS1_PROMPT"';    
     else 
      GIT_PS1_SHOWUPSTREAM=; GIT_PS1_SHOWDIRTYSTATE=; GIT_PS1_SHOWUNTRACKEDFILES=; GIT_PS1_SHOWCOLORHINTS=; 
      PROMPT_COMMAND='__git_ps1 "$PS1_INFO" "$PS1_PROMPT"'; 
     fi 
    fi 
} 
alias gitprompt="_gitprompt" 

gitprompt verbose 

FWIW, set -x; source /path/to/activate gibt:

+ __git_ps1 '\[\e[0;32m\]\[\e[0;33m\]\w' '\[\e[1;32m\] \$ \[\e[m\]' 
+ local exit=126 
+ local pcmode=no 
+ local detached=no 
+ local 'ps1pc_start=\[email protected]\h:\w ' 
+ local 'ps1pc_end=\$ ' 
+ local 'printf_format= (%s)' 
+ case "$#" in 
+ pcmode=yes 
+ ps1pc_start='\[\e[0;32m\]\[\e[0;33m\]\w' 
+ ps1pc_end='\[\e[1;32m\] \$ \[\e[m\]' 
+ printf_format=' (%s)' 
+ PS1='\[\e[0;32m\]\[\e[0;33m\]\w\[\e[1;32m\] \$ \[\e[m\]' 
+ local ps1_expanded=yes 
+ '[' -z '' ']' 
+ '[' -z '3.2.57(1)-release' ']' 
+ shopt -q promptvars 
+ local repo_info rev_parse_exit_code 
+ git rev-parse --git-dir --is-inside-git-dir --is-bare-repository --is-inside-work-tree --short HEAD 
+ repo_info= 
+ rev_parse_exit_code=128 
+ '[' -z '' ']' 
+ return 126 
~ $ set -x; source ~/Documents/Projects/Coding/Python/venvs/zoot/bin/activate 
+ set -x 
+ source /Users/Rax/Documents/Projects/Coding/Python/venvs/zoot/bin/activate 
+ deactivate nondestructive 
+ unset -f pydoc 
+ '[' -z _ ']' 
+ PATH=/Users/Rax/.cabal/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/Rax/bin:/opt/X11/bin:/Library/TeX/texbin 
+ export PATH 
+ unset _OLD_VIRTUAL_PATH 
+ '[' -z '' ']' 
+ '[' -n /bin/bash ']' 
+ hash -r 
+ '[' -z _ ']' 
+ PS1='\[\e[0;32m\]\[\e[0;33m\]\w\[\e[1;32m\] \$ \[\e[m\]' 
+ export PS1 
+ unset _OLD_VIRTUAL_PS1 
+ unset VIRTUAL_ENV 
+ '[' '!' nondestructive = nondestructive ']' 
+ VIRTUAL_ENV=/Users/Rax/Documents/Projects/Coding/Python/venvs/zoot 
+ export VIRTUAL_ENV 
+ _OLD_VIRTUAL_PATH=/Users/Rax/.cabal/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/Rax/bin:/opt/X11/bin:/Library/TeX/texbin 
+ PATH=/Users/Rax/Documents/Projects/Coding/Python/venvs/zoot/bin:/Users/Rax/.cabal/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/Rax/bin:/opt/X11/bin:/Library/TeX/texbin 
+ export PATH 
+ '[' -z '' ']' 
+ '[' -z '' ']' 
+ _OLD_VIRTUAL_PS1='\[\e[0;32m\]\[\e[0;33m\]\w\[\e[1;32m\] \$ \[\e[m\]' 
+ '[' x '!=' x ']' 
+ basename /Users/Rax/Documents/Projects/Coding/Python/venvs/zoot 
+ PS1='(zoot) \[\e[0;32m\]\[\e[0;33m\]\w\[\e[1;32m\] \$ \[\e[m\]' 
+ export PS1 
+ alias pydoc 
+ '[' -n /bin/bash ']' 
+ hash -r 
+ __git_ps1 '\[\e[0;32m\]\[\e[0;33m\]\w' '\[\e[1;32m\] \$ \[\e[m\]' 
+ local exit=0 
+ local pcmode=no 
+ local detached=no 
+ local 'ps1pc_start=\[email protected]\h:\w ' 
+ local 'ps1pc_end=\$ ' 
+ local 'printf_format= (%s)' 
+ case "$#" in 
+ pcmode=yes 
+ ps1pc_start='\[\e[0;32m\]\[\e[0;33m\]\w' 
+ ps1pc_end='\[\e[1;32m\] \$ \[\e[m\]' 
+ printf_format=' (%s)' 
+ PS1='\[\e[0;32m\]\[\e[0;33m\]\w\[\e[1;32m\] \$ \[\e[m\]' 
+ local ps1_expanded=yes 
+ '[' -z '' ']' 
+ '[' -z '3.2.57(1)-release' ']' 
+ shopt -q promptvars 
+ local repo_info rev_parse_exit_code 
+ git rev-parse --git-dir --is-inside-git-dir --is-bare-repository --is-inside-work-tree --short HEAD 
+ repo_info= 
+ rev_parse_exit_code=128 
+ '[' -z '' ']' 
+ return 0 
+0

Was ist die Ausgabe von 'echo" $ PS1 "'? Ist '_OLD_VIRTUAL_PS1' definiert? Was passiert, wenn du den virtualenv mit 'set -x' aktivierst? –

+0

@AndreaCorbellini: Vor und nach der Aktivierung eines virtuellen Env gibt 'echo "$ PS1" '\[\e[0;32m\]\[\e[0;33m\]\w\[\e[1;32m\] \$ \[\e[m\]; und '_OLD_VIRTUAL_PS1' ist das gleiche. Wie aktiviere ich ein virtualenv mit 'set -x'? – orome

+0

'set -x; . ./path/to/activate' (könnte viel Ausgabe erzeugen) –

Antwort

1

In Ihrem .bash_profile Sie anrufen gitprompt verbose, die wiederum setzt:

PROMPT_COMMAND='__git_ps1 "$PS1_INFO" "$PS1_PROMPT"' 

Ich weiß nicht, was __git_ps1 ist, sondern von dem Ausgang des set -x; source ... kann ich sagen, dass es der Täter :

+ hash -r # <<< This is the last command executed by the 'activate' script 
+ __git_ps1 '\[\e[0;32m\]\[\e[0;33m\]\w' '\[\e[1;32m\] \$ \[\e[m\]' # <<< This is PROMPT_COMMAND being called 
... 
+ PS1='\[\e[0;32m\]\[\e[0;33m\]\w\[\e[1;32m\] \$ \[\e[m\]' # <<< This is PS1 getting restored 
... 

Hier finden Sie ein paar Optionen, wählen Sie die Ihnen lieber:

  • ändern Sie activate und fügen Sie eine Zeile zu Unset hinzu PROMPT_COMMAND;
  • ändern Sie __git_ps1 (wenn Sie können), so dass es PS1 nicht berührt, wenn VIRTUAL_ENV festgelegt ist;
  • Wenn Sie __git_ps1 nicht ändern können, dann schreiben Sie einen Wrapper darum;
  • manuell PROMPT_COMMAND vor dem Eintritt in einen virtualenv Unset;
  • Vermeiden Sie gitprompt in Ihrem .bash_profile anrufen.
+0

Hinweis: Ich habe die Ausgabe aktualisiert, die ich von 'et -x sehe; source ... '(In der früheren Version gab es viel Müll). – orome

+0

@raxacoricofallapatorius: dass Müll eigentlich nützlich war :) –

+0

Es sieht aus wie 'PROMPT_COMMAND' [ist das Problem] (http://Stackoverflow.com/a/3058366/656912), aber ich bin mir nicht sicher, wie ich das ansprechen soll (seit virtualenv verwendet 'PS1'). – orome

Verwandte Themen