在每个命令的 Shell 提示符中更新 git 变量

在每个命令的 Shell 提示符中更新 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

我放入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。

相关内容