2013-02-20 10 views
7

मेरे पास वर्चुअलएव मैक ओएसएक्स (10.8.2) पर चल रहा है, और जब भी यह काम करता है (मैं venvs सेट कर सकता हूं, उनके बीच स्विच कर सकता हूं, सक्रिय और निष्क्रिय कर सकता हूं), एक चीज जो काम नहीं करती है (और काफी परेशान है) टर्मिनल प्रॉम्प्ट स्विच।वर्चुअलएन्व क्यों अपना टर्मिनल प्रॉम्प्ट सेट नहीं कर रहा है?

[hugo] /current/directory/path/ 
$ 

अर्थात उसमें एक लाइन ब्रेक है:

मेरे बुनियादी शीघ्र [\u] \w \n\[\033[0;31m\]$\[\e[0m\] जो renders के रूप में है।

मैं एक 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 वर (myproject)[\u] \w \n\[\033[0;31m\]$\[\e[0m\] पर सेट किया जाता है, लेकिन किसी कारण से चिपकना नहीं है, और सही पीएस 1 निर्यात नहीं किया जा रहा है।

क्या यह मेरे कस्टम प्रॉम्प्ट, या अनुमति समस्या के साथ कुछ करना है? यह स्पष्ट रूप से वर्चुअलनव चीज़ नहीं है, क्योंकि मुझे पता है कि यह काम करता है (और वास्तव में यह मेरे वानर वीएम पर काम करता है, सिर्फ मेरे ओएसएक्स होस्ट पर नहीं)।

?

[अद्यतन 1]

मेरे गलती - ऐसा लगता है कि मेरे पास है लग रहा है एक Git अवगत शीघ्र जो निर्देशिका/रेपो स्थिति के आधार पर शीघ्र अधिलेखन है। यह वेंव प्रॉम्प्ट को मार रहा है। अब मुझे केवल एक की आवश्यकता है जो दोनों करता है - इसलिए, फॉलो-अप प्रश्न यह है: क्या किसी के पास रंग, गिट-जागरूक, ओएसएक्स प्रॉम्प्ट है जो वर्चुअलएन्व के साथ अच्छी तरह से स्थित है।

उत्तर

10

जो कुछ भी आपके गिट-जागरूक प्रॉम्प्ट को स्थापित कर रहा है वह शायद 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 के अंत में जोड़ना सीधे काम नहीं करता था। इसके बजाय, मैंने इस स्क्रिप्ट को चिपकाया है (जो वर्चुअलएनवी फ़ोल्डर में "बिन/सक्रिय" में है) .bashrc में अन्य प्रॉम्प्ट सेटअप के ठीक नीचे , लेकिन पीएस 1 के निर्यात से पहले, और यह काम किया। – Nate

+0

मुझे लगता है कि अंतिम लिन में एक अर्धविराम जोड़ा जाना चाहिए इसे $ 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

संबंधित मुद्दे