2013-02-20 2 views
7

나는 Mac OSX (10.8.2)에서 실행되는 virtualenv를 가지고 있으며, 작동하는 동안 (나는 venvs를 설정하고 그 사이를 전환하고 활성화하고 비활성화 할 수있다.) 작동하지 않는 한 가지가 매우 귀찮다. 터미널 프롬프트 스위치. 그것에서 줄 바꿈을 가지고virtualenv가 터미널 프롬프트를 설정하지 않는 이유는 무엇입니까?

[hugo] /current/directory/path/ 
$ 

즉 :

내 기본 프롬프트로 렌더링하는 [\u] \w \n\[\033[0;31m\]$\[\e[0m\]이다.

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

을하지만 사실 나는 전혀 변화를 얻을 : 나는 VIRTUALENV을 활성화하면

, 나는 기대.

은 내가 /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 일입니다. 사실 그것이 작동한다는 것을 알고 있기 때문에 (사실 내 OSX 호스트가 아니라 내 방해하는 VM에서도 작동합니다).

?

[업데이트 1]

내 실수는 - 그것은 내가 가지고있는 것처럼 보이는 자식 인식 디렉토리/REPO 상태에 따라 프롬프트를 덮어 쓰기하는 프롬프트. 이것은 venv 프롬프트를 죽이는 것입니다. 이제는 두 가지를 모두 수행해야합니다. 즉, 후속 질문은 다음과 같습니다. 누군가가 색상, git-aware, 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의 끝에 추가하는 것은 직접 작동하지 않았습니다. 대신에 .bashrc의 다른 프롬프트 설정 바로 아래에이 스크립트 (virtualenv 폴더의 "bin/activate"에있는 것과 동일 함)를 붙여 넣었습니다. ,하지만 PS1의 수출 전에, 그리고 그것은 작동했습니다. – Nate

+0

나는 마지막 lin에 추가 된 세미콜론이 필요하다고 생각 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

관련 문제