複雑な 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}"
}
__prompt_command
で私が行っているすべてのことを見たい場合は、私のbashrcのサブファイルを見てください。 関数。
プロンプト コマンドを使用したくない場合は、次の 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\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
if [ "$curr_exit" != 0 ]; then
PS1="[${BRed}$curr_exit${RCol}]$PS1"
fi
}