我正在运行 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。