Command-Line
在每個命令的 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 語句的任何神奇方式?
我最終使用
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。