だから、私はそれが次のようになるようにbashプロンプトでカスタマイズしようとしています
_[feralin@localhost ~]$ _
_
色付き。私は一定の色(プロンプトを見るたびに同じ色)を得ることができましたが、最後のコマンドがゼロ以外の終了ステータスだった場合、ユーザー名(「feralin」)を緑ではなく赤に見せたいです。私は思いついた:
_\e[1;33m[$(if [[ $? == 0 ]]; then echo "\e[0;31m"; else echo "\e[0;32m"; fi)\u\e[m@\e[1;34m\h \e[0;35m\W\e[1;33m]$ \e[m
_
しかし、私の観察から、$(if ...; fi)
は_.bashrc
_が実行されたときに一度評価され、結果は永久に置換されるようです。これにより、最後の終了コードがゼロ以外(_echo $?
_など)でも、名前は常に緑色になります。これは何が起こっているのですか?それとも、それは単に私のプロンプトで何か他のものが間違っていますか?長い質問の短い、最後の終了コードを使用するようにプロンプトを取得するにはどうすればよいですか?
複雑なPS1に接し始めているので、Prompt_COMMAND
。
これにより、関数に設定し、プロンプトを生成する各コマンドの後に実行されます。
~/.bashrc
Prompt_COMMAND=__Prompt_command # Func to gen PS1 after CMDs
__Prompt_command() {
local EXIT="$?" # This needs to be first
PS1=""
local RCol='\[\e[0m\]'
local Red='\[\e[0;31m\]'
local Gre='\[\e[0;32m\]'
local BYel='\[\e[1;33m\]'
local BBlu='\[\e[1;34m\]'
local Pur='\[\e[0;35m\]'
if [ $EXIT != 0 ]; then
PS1+="${Red}\u${RCol}" # Add red if exit code non 0
else
PS1+="${Gre}\u${RCol}"
fi
PS1+="${RCol}@${BBlu}\h ${Pur}\W${BYel}$ ${RCol}"
}
これはあなたが望む行に聞こえるはずです。私のbashrcの sub file を見て、___Prompt_command
関数。
[プロンプト]コマンドを使用したくない場合は、次の2つの点を考慮する必要があります。
変数を使用した作業例
_PS1="\$(VALU="\$?" ; echo \$VALU ; date ; if [ \$VALU == 0 ]; then echo zero; else echo nonzero; fi) "
_
変数なしの実例
ここでは、_$?
_をオーバーライドするコマンドの前に、ifを最初にする必要があります。
_PS1="\$(if [ \$? == 0 ]; then echo zero; else echo nonzero; fi) "
_
\$()
がどのようにエスケープされるのかに注意してください。すぐに実行されませんが、PS1が使用されるたびに実行されます。また、_\$?
_のすべての使用
デフォルトのDebianカラーを保持し、正確なコードを印刷し、失敗した場合にのみ印刷したかったのです。
# Show exit status on failure.
Prompt_COMMAND=__Prompt_command
__Prompt_command() {
local curr_exit="$?"
local BRed='\[\e[0;91m\]'
local RCol='\[\e[0m\]'
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
if [ "$curr_exit" != 0 ]; then
PS1="[${BRed}$curr_exit${RCol}]$PS1"
fi
}
@demureの改善
終了ステータスが常に0または1であるとは限らないため、これは重要だと思います。
if [ $EXIT != 0 ]; then
PS1+="${Red}${EXIT}:\u${RCol}" # Add red if exit code != 0
else
PS1+="${Gre}${EXIT}:\u${RCol}" # Also displays exit status
fi