2013-02-20 128 views
7

我有在Mac OSX上運行的virtualenv(10.8.2),雖然它可以工作(我可以設置venvs,在它們之間切換,激活和解除關聯),但是一件不起作用的功能是終端提示開關。爲什麼virtualenv沒有設置我的終端提示符?

我的基本提示是[\u] \w \n\[\033[0;31m\]$\[\e[0m\],其呈現爲:

[hugo] /current/directory/path/ 
$ 

即它具有在其一個換行符。

如果我激活的virtualenv,我希望:

(myproject)[hugo] /current/directory/path/ 
$ 

但事實上我得到一點變化都沒有。

我已經打開了/bin/activate劇本,看着代碼:

if [ -z "$VIRTUAL_ENV_DISABLE_PROMPT" ] ; then 
    _OLD_VIRTUAL_PS1="$PS1" 
    if [ "x" != x ] ; then 
     PS1="$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 

如果我在堅持到底的回聲,我可以看到的是,PS1 var設置(myproject)[\u] \w \n\[\033[0;31m\]$\[\e[0m\],但出於某種原因,沒有粘附,並且正確的PS1沒有被導出。

這是我的自定義提示或權限問題?這很明顯是而不是這是一個virtualenv的東西,因爲我知道它的工作原理(事實上它適用於我的流浪VM,而不是我的OSX主機)。

[更新1]

我的錯誤 - 它看起來像我有一個混帳感知提示,這是覆蓋取決於目錄/回購的狀態提示。這是什麼殺死venv提示符。現在我只需要一個可以同時執行的操作 - 因此,後續問題是:是否有人有顏色,git-aware,OSX提示符,這些提示符與virtualenv很好地匹配。

回答

10

無論設置你的git-aware提示符,可能是定義了PROMPT_COMMAND函數。嘗試將其添加到您的.bashrc文件的末尾。

add_venv_info() { 
    if [ -z "$VIRTUAL_ENV_DISABLE_PROMPT" ] ; then 
     _OLD_VIRTUAL_PS1="$PS1" 
     if [ "x" != x ] ; then 
      PS1="$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" 
      elif [ "$VIRTUAL_ENV" != "" ]; then 
       PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1" 
      fi 
     fi 
     export PS1 
    fi 
} 
PROMPT_COMMAND=add_venv_info 
+0

燁分開 - 感謝 - 我的工作了最終 – 2013-02-22 08:57:55

+0

Likewise-不得不擺弄。添加在.bashrc末尾不會直接工作,而是直接在.bashrc中的其他提示設置下複製粘貼此腳本(與virtualenv文件夾中的「bin/activate」中的內容相同) ,但在PS1出口之前,它的工作。 – Nate 2014-01-21 17:02:34

+0

我認爲需要在最後一個林中添加一個分號e $ PROMPT_COMMAND和add_venv_info之間,以使其工作。 – jgosmann 2017-07-12 18:48:10

5

我有同樣的問題,但上述解決方案沒有爲我工作。

我落得這樣做: (記住,有一個額外的空間給(virtenv)$

# Virtual ENV stuff 
add_venv_info() { 
    if [ -z "$VIRTUAL_ENV_DISABLE_PROMPT" ] ; then 
     VIRT_ENV_TXT="" 
     if [ "x" != x ] ; then 
      VIRT_ENV_TXT="" 
     else 
      if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then 
       # special case for Aspen magic directories 
       # see http://www.zetadev.com/software/aspen/ 
       VIRT_ENV_TXT="[`basename \`dirname \"$VIRTUAL_ENV\"\``]" 
      elif [ "$VIRTUAL_ENV" != "" ]; then 
       VIRT_ENV_TXT="(`basename \"$VIRTUAL_ENV\"`)" 
      fi 
     fi 
     if [ "${VIRT_ENV_TXT}" != "" ]; then 
      echo ${VIRT_ENV_TXT}" " 
     fi 
    fi 
} 

# Now we construct the prompt. 
# in my case a bunch of lines constructing the complete PS1 
# somewhere call the add_venv_info function like below 

     PS1=${PS1}"\[\$(job_color)\]\n\$(add_venv_info)\$\[${NC}\] " 
+0

你需要提供job_color – msudder 2014-09-24 17:28:59

+1

我有同樣的問題,最重要的答案不適合我。我已經將你的add_venv_info函數添加到了我的提示構建函數中,並且它工作正常,謝謝。 – 2015-02-19 13:19:20

+0

與@TomDalton做了同樣的事情,工作得很好!請注意,'if [「x」!= x]'部分並不真正起作用,可以刪除。 – Pascal 2016-08-10 10:06:58

相關問題