Bash如果没有按预期工作

时间:2013-09-29 18:03:09

标签: bash shell

我正在尝试从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";'

1 个答案:

答案 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:~$