連続した「正しい」コマンドの数を計算するためにbash PS1を作成します。

連続した「正しい」コマンドの数を計算するためにbash PS1を作成します。

$?私の目標は、短縮されたユーザー名、短縮されたパスを青色で表示し、コマンドを誤って入力するたびにリセットされるカウンタ変数を表示するbashプロンプトを作成することです(厳密には同じではありませんが、それを確認するために使用します)。

現在私は以下を~/.bashrc持っています:

counter=0
#should increment counter if no errors, else reset counter
PROMPT_COMMAND="if [ $? -eq 0 ]; then ((counter++)); else counter=0; fi"
PS1='(${USER:0:3}@\[\e[0;34m\]$(basename $(dirname $PWD))/$(basename $PWD)\[\e[m\])[$counter]\\$ '

これは次のことを示しています。

(use@//home)[17]$

私の主な問題は、ゼロ以外の終了状態を取得したときにカウンタがゼロにリセットされないことです。PROMPT_COMMANDたとえば、失敗したコマンドの後にコマンドを実行でき、aasdjfasdfこのecho $counterコマンドは表示されます0(実際には1PROMPT_COMMANDがすぐにインクリメントされるためaです)。

私が持っているもう一つの小さな問題は、ルートディレクトリに私のプロンプトが表示されることです。

(use@///)[11]$

これは理想的ではありません(3/)。私もこの問題をどのように修正するかはわかりませんが、少なくとも大きな問題ではありません。

PROMPT_COMMANDにカウンタを正しくインクリメントしてリセットするにはどうすればよいですか?

編集する:これは私のPS1であり、他の人が気になる場合に備えて、私が望むすべてのことを行います。

counter=0
PROMPT_COMMAND='if [ $? -eq 0 ]; then ((counter++)); else counter=0; fi;'
PS1='(\[\e[4m\]${USER:0:3}\[\e[0m\]@\[\e[34m\]${PWD:${#PWD}<15?0:(-15)}\[\e[m\])[$counter]\\$ '

答え1

PROMPT_COMMANDを次に変更します。

PROMPT_COMMAND='if [ $? -eq 0 ]; then counter=$((counter+1)); else counter=0; fi'

早期拡張を防ぐには、一重引用符を使用し、$?増加した値には直接割り当てを使用しますcounter

関連情報