2013-02-20 15 views
7

私はvirtualenvをMac OSX(10.8.2)で動作させていますが、動作している間に(私はvenvsを設定し、それらの間で切り替え、起動し、無効にすることができます)、動作しない(そして、ターミナルプロンプトスイッチ。それに改行を持ってvirtualenvが端末プロンプトを設定しないのはなぜですか?

[hugo] /current/directory/path/ 
$ 

すなわち:

私の基本的なプロンプトはとしてレンダリングされ、[\u] \w \n\[\033[0;31m\]$\[\e[0m\]です。

私は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のものです。私はそれがうまく動作することを知っています(実際には私のOSGホストではなく、私の迷惑メールVMで動作します)。

[UPDATE 1]

私の間違いは、 - それは私が持っているように見えるのgit-意識したディレクトリ/レポ状況に応じて、プロンプトを上書きされているプロンプト。これは、venvプロンプトを強制終了させるものです。今私はちょうど両方を行う必要があります - それで、フォローアップの質問です:誰も色、gitを認識し、OSXのプロンプトがうまくvirtualenvで場所を持っていますか?

答えて

10

git対応のプロンプトを設定しているものは、おそらく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

うんから(virtenv)を分離するために追加のスペースがあること - 感謝 - 私は最終的にそれを働い –

+0

Likewise-をいじる必要があったが。 .bashrcの末尾に追加すると直接動作しませんでした。代わりに、このスクリプト(これは、virtualenvフォルダの "bin/activate"にあるものと同じです)を.bashrcの他のプロンプト設定の直下にコピーしますしかし、PS1の輸出前に、それは働いた – Nate

+0

私は最後の林にセミコロンを追加する必要があると思うeを$ PROMPT_COMMANDとadd_venv_infoの間で使用して動作させます。 – jgosmann

5

私は同じ問題を抱えていましたが、上記の解決策は私には役に立たなかった。

は、私はこれをやってしまった: (心$

# 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

+1

トップの回答が私にとってうまくいかなかったのと同じ問題がありました。私はあなたのadd_venv_info関数をプロンプトビルディング関数に追加しました。 –

+0

@TomDaltonと同じことがうまくいきましたか? 'if [" x "!= x]'は本当に目的を果たしておらず、削除できることに注意してください。 – Pascal

関連する問題