Command-Line

在每個命令的 Shell 提示符下更新 git 變數

  • January 13, 2016

我正在執行 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 語句的任何神奇方式?

我最終使用precmd

我放入alias precmd 'source ~/.tcsh/precmd.tcsh'我的 .cshrc 文件並將提示集移到該文件中。

.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。

引用自:https://unix.stackexchange.com/questions/254979