각 명령에 대한 쉘 프롬프트에서 git 변수 업데이트

각 명령에 대한 쉘 프롬프트에서 git 변수 업데이트

TCSH를 실행 중이고 명령을 실행할 때마다 프롬프트를 업데이트하고 싶습니다. 현재 백틱을 통해 이 작업을 수행할 수 있다고 생각합니다.

 set tmpstr = `git status --untracked-files=no --porcelain`

 set prompt="%{\e[35;1m%} $tmpstr %{\e[32;1m%}%n%{\e[37m%}@%{\e[33m%}%m%{\e[37m%}:%{\e[36m%}%~%{\e[37m%}"\$"%{\e[0m%} " 

하지만 매번 전체 파일 목록을 갖고 싶지는 않습니다. 따라서 git 디렉토리가 깨끗한지 여부를 말하는 것으로 충분합니다.

 set tmpstr1 = `git status --untracked-files=no --porcelain`

if ("$tmpstr" == "") then 
    set gitstr = 'Git: Clean'
else 
    set gitstr = 'Git: Uncommitted GIT ' 
endif 

 set prompt="%{\e[35;1m%} \$gitstr %{\e[32;1m%}%n%{\e[37m%}@%{\e[33m%}%m%{\e[37m%}:%{\e[36m%}%~%{\e[37m%}"\$"%{\e[0m%} "

하지만 gitstr은 명령이 아니기 때문에 업데이트되지 않습니다. 누구든지 다른 아이디어가 있나요? 아니면 명령이 실행될 때마다 완전한 if 문을 호출하는 마법의 방법이 있습니까?

답변1

나는 결국 사용했다precmd

.cshrc 파일을 넣고 alias precmd 'source ~/.tcsh/precmd.tcsh'프롬프트 세트를 해당 파일로 옮겼습니다.

.tcsh 소스

set tmpstr = `(git status --untracked-files=no --porcelain >! ~/out ) >&! ~/out1`
#echo $tmpstr #for debugging
    if !( -s ~/out )  then 
        if !( -s ~/out1 ) then
            set gitstr = "Git: Clean"
            set prompt="%{\e[35;1m%} \$gitstr %{\e[32;1m%}%n%{\e[37m%}@%{\e[33m%}%m%{\e[37m%}:%{\e[36m%}%~%{\e[37m%}"\$"%{\e[0m%} "
        else
            #echo "not in GIT"
            set prompt="%{\e[35;1m%} %{\e[32;1m%}%n%{\e[37m%}@%{\e[33m%}%m%{\e[37m%}:%{\e[36m%}%~%{\e[37m%}"\$"%{\e[0m%} "
        endif
    else 
        set gitstr = "Git: Uncommitted GIT "
        set prompt="%{\e[35;1m%} \$gitstr %{\e[32;1m%}%n%{\e[37m%}@%{\e[33m%}%m%{\e[37m%}:%{\e[36m%}%~%{\e[37m%}"\$"%{\e[0m%} "
    endif 

이를 통해 get 상태에 있는지 확인하고 해당 상태를 cmd 라인에 다시 보고할 수 있습니다. GIT 폴더를 떠날 때 GIT 상태를 보고하지 않습니다. tmpstr에서 일어나는 장난은 konsole에서 stderror를 제거하는 것입니다.

관련 정보