2つのプロンプトを1つにマージし、エラーステータスを赤/オレンジ色で表示します。

2つのプロンプトを1つにマージし、エラーステータスを赤/オレンジ色で表示します。

みんなのように私にもカスタムヒントがあります。私のrootユーザーは赤に変わり、通常のユーザーは緑に変わり、他のいくつかは次のとおりです。

存在するbash.bashrc

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\n\$ '

存在する.bashrc

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

次に続く:

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\n\$

一般ユーザーの場合

これが私がヒントでできる最善の方法ですが、実際の上級管理者が自分のヒントを私に共有しました。

PS1_Error="\[\033[31;1m\]"
PS1_Normal="\[\033[0m\]"
PS1_Inside='${debian_chroot:+($debian_chroot)}\u@\h:\w$bad\$ '
PS1="\`
        retcode=\$? ;
        if [ 0 -ne \$retcode ]; then
                bad=\" [\\\\\\\$?=\$retcode]\"
                echo \"$PS1_Error$PS1_Inside$PS1_Normal\"
        else
                bad='';
                echo \"$PS1_Inside\";
        fi;
\`"
unset PS1_Error PS1_Normal PS1_Inside

エラーがあると赤に変わる素晴らしい能力があります。エラー番号を表示

私はあまりにも愚かで理解できません。どのように動作しますか?(必須変数が設定されていませんか???)、変数に含めるには確かにあまりにも愚かです。 (そしてエラー条件にオレンジが欲しい...)

上級管理者は非常に忙しい男/女/中立的な人なので、誰かが上記を理解し、私に魚を教えるよりも私に釣り方を教えたい人がいるかどうかU&Lに尋ねます。良い点PS1と愚かな点を混ぜて、ここで何が起こっているのかを説明するのに役立ちます。

ベストアンサー1

次の変数はプロンプト自体を説明します。

PS1_Error="\[\033[31;1m\]"
PS1_Normal="\[\033[0m\]"
PS1_Inside='${debian_chroot:+($debian_chroot)}\u@\h:\w$bad\$ '

色は以下を使用して行われます。ANSIエスケープコード\033エスケープ文字(8進数33 = 27)の場合は、[31;1mテキストの色を31に設定し、効果を1に設定します。[0mエフェクトをすべてデフォルト値の0に設定します。どのようPS1_Insideに入ったか注目してください一つ引用符('')は、このステップで変数置換を実行しないことを示します。 (後でこれが起こります。)

本当の魔法はここで起こります。

PS1="\`
         ...
\`"

これは実行コード内でPS1を出力に設定します``変数の拡張は結果に関係なく発生します。コードが実行されますプロンプトが表示されるたびに。コード自体は次のように実行されます。

        retcode=\$? ;

$?前のコマンドの結果が含まれます。 0は正常を意味し、他のすべては失敗条件を意味します。retcode現在は内部に保管されています。コードの実行中に変数にアクセスして定義するときに置き換えられないようにしたいので、すべてをエスケープする必要があります。

        if [ 0 -ne \$retcode ]; then

ゼロでなければ何か間違っています。したがって、エラーに使用されるプロンプトスタイルを反映します。上記でbad使用したものはPS1_InsidePS1_Errorを変更するために使用され、PS1_Normal色を再び正常に変更するために使用されます。

                bad=\" [\\\\\\\$?=\$retcode]\"
                echo \"$PS1_Error$PS1_Inside$PS1_Normal\"
        else

この場合、エラーは発生しなかったため、色を指定せずに出力のみを行いますPS1_Insidebadプロンプトに何も表示されないように空白のままにします。

                bad='';
                echo \"$PS1_Inside\";
        fi;

最後に、環境が複雑にならないように補助変数の設定を解除します。

unset PS1_Error PS1_Normal PS1_Inside

おすすめ記事