2012-02-17 3 views
2

현재 터미널 프롬프트에는 git 정보가 포함되어 있습니다.터미널 프롬프트 용 기본 bash 스크립트

예 클린 디렉터리 : michaelespinosa : ~/사이트/example.com [자식 : 마스터]
예 더러운 디렉토리 : michaelespinosa : ~/사이트/example.com [자식 : 마스터 *]

나는 또한 원하는 자식 정보를 색칠하기 (청결한 경우 녹색) 또는 더러운 경우 빨간색으로.

나는 함수 (parse_git_color)를 추가하고 별표가 있는지 여부에 따라 if 문을 사용하여 색상을 설정할 수 있다고 생각했습니다.

문제는 깨끗한 디렉터리와 오염 된 디렉터리 모두 녹색으로 계속 돌아갑니다. 문제는 if 문과 관련이 있다고 생각합니다. parse_git_dirty == "*"parse_git_dirty의 값을 "*"와 비교합니다.

function parse_git_dirty { 
    [[ $(git status 2> /dev/null | tail -n1) != "nothing to commit (working directory clean)" ]] && echo "*" 
} 
function parse_git_color { 
    if [ parse_git_dirty == "*" ]; then 
    echo '\033[0;31m\' 
    else 
    echo '\033[0;32m\' 
    fi 
} 
function parse_git_branch { 
    git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/$(parse_git_color)[git:\1$(parse_git_dirty)]/" 
} 

도움을 주시면 감사하겠습니다. 감사합니다.

답변

3

PS1에는 \$(...)입니다. 프롬프트가 인쇄 될 때마다 \$() 명령 만 호출되므로 가져 오기입니다. $()은 한 번만 호출됩니다 (PS1이 초기화되었을 때).

function parse_git_dirty 
{ 
    [[ "$(git status 2> /dev/null | tail -n1)" != "nothing to commit (working directory clean)" ]] && echo "*" 
} 

function parse_git_color 
{ 
    if [ "$(parse_git_dirty)" == "*" ] ; then 
    echo "0;31m" 
    else 
    echo "0;32m" 
    fi 
} 

function parse_git_branch 
{ 
    git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/[git:\1$(parse_git_dirty)]/" 
} 

export PS1="\[\033[\$(parse_git_color)\]\$(parse_git_branch) \[\033[0m\]" 
+0

제안 사항을 업데이트했지만 제대로 작동하지 않았습니다. 나는 ~/Sites/example.com 033 [0; 32m [자식] : michaelespinosa로 끝났습니다. 문제는 if 문과 관련이 있다고 생각합니다. 왜냐하면 문제가 무엇이든 상관없이 반환하기 때문입니다. – michaelespinosa

+0

@michaelespinosa Sry, 제 제안을 테스트하지 않았습니다. 나는 대답을 고쳤다. – sgibb

+0

감사합니다. @sgibb 키가 parse_git_dirty를 "$ (parse_git_dirty)"로 변경 중입니다. – michaelespinosa