我正在尝试从PS1
调用一个函数,该函数输出不同颜色的东西,具体取决于它是什么。
$?
是程序的退出状态。0
,我试图让此功能输出红色文字。 不是输出我期望的内容,而是在此$LRED
的一个变体中始终IF
,或在此$HII
的另一个变体中始终IF
所有相关BASH
发布在下方,你们可以提供任何见解吗?
...
# Custom Colour Alias
NM="\[\033[0;38m\]" # No background and white lines
HI="\[\033[1;36m\]" # Username colour
HII="\[\033[0;37m\]" # Name colour
SI="\[\033[1;32m\]" # Directory colour
IN="\[\033[0m\]" # Command input color
LRED="\[\033[1;31m\]"
BRW="\[\033[0;33m\]"
...
exitStatus ()
{
if [ $? -ne 0 ]
then
echo "$LRED\$?"
else
echo "\$?"
fi
#echo \$?
}
...
export PS1="\n$HII[ $LRED\u $SI\w$NM $HII]\n[ \! / \# / $(exitStatus) $HII]$LRED $ $IN"
这是我根据下面接受的答案所做的。
# Before Prompt
export PROMPT_COMMAND='EXSO=$?;\
if [[ $EXSO != 0 ]];\
then\
ERRMSG="$LRED$EXSO";\
else\
ERRMSG="$EXSO";\
fi;\
PS1="\n$HII[ $LRED\u $SI\W$NM $HII\! / \# / $ERRMSG $HII] $SI$ $IN";'
答案 0 :(得分:1)
问题是你对PS1的赋值只被评估一次,因此exitStatus只被调用一次。正如Nirk还提到你应该使用PROMPT_COMMAND。在显示每个新提示之前,将其设置为要执行的命令。一个例子:
PROMPT_COMMAND='if [ $? -ne 0 ]; then echo -n FAIL:;fi'
如果上一个命令失败,请在每次新提示之前大喊失败:
mogul@linuxine:~$ date
Sun Sep 29 21:13:53 CEST 2013
mogul@linuxine:~$ rm crappy_on_existent_file
rm: cannot remove ‘crappy_on_existent_file’: No such file or directory
FAIL:mogul@linuxine:~$