
みんなのように私にもカスタムヒントがあります。私の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_Inside
色PS1_Error
を変更するために使用され、PS1_Normal
色を再び正常に変更するために使用されます。
bad=\" [\\\\\\\$?=\$retcode]\"
echo \"$PS1_Error$PS1_Inside$PS1_Normal\"
else
この場合、エラーは発生しなかったため、色を指定せずに出力のみを行いますPS1_Inside
。bad
プロンプトに何も表示されないように空白のままにします。
bad='';
echo \"$PS1_Inside\";
fi;
最後に、環境が複雑にならないように補助変数の設定を解除します。
unset PS1_Error PS1_Normal PS1_Inside