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를 제거하는 것입니다.