各コマンドのシェルプロンプトでgit変数を更新する

各コマンドのシェルプロンプトで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

.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を削除することです。

関連情報