检查上一个命令是否"有效"

IQA*_*eas 8 bash .bash-profile

我有一个定义的函数.bashrc,显示上一个命令是否成功完成(从完整版本简化):

function previous_command_status()
{
    if [ $? -eq 0 ]; then
        echo "Command successful"
    else
        echo "Command failed with exit code $exit_code"
    fi
}

PROMPT_COMMAND="previous_command_status"
Run Code Online (Sandbox Code Playgroud)

问题是,Command successful当我开始提示时立即显示,即使我还没有"正式"运行任何命令.第二个(并且出于同样的原因),脚本显示Command successful(或最后一个"真实"命令的输出),即使我所做的只是按下返回按钮而没有实际执行命令(示例输出).

如果命令实际运行,我怎么能让脚本只显示消息?

pyn*_*exj 2

正如其他人所提到的,不需要在提示中显示这么长的消息。以下是Bash我使用的提示:

截图

正如您所看到的,提示中的退出值在非零时会变为红色,因此您可以轻松地知道该命令刚刚失败。如果命令被信号终止,信号编号​​和名称也会显示。在上面的屏幕截图中,130:2:INT表示最后一个命令以 (= 128 + 2) 退出,并被信号( )130终止。2SIGINT

以下是 中的代码bashrc

function _PS1_command()
{
    local lastexit=$?
    local ESC=$'\033'

    (( lastexit )) && g_PS1_Qcolor="$ESC[1;31m" || g_PS1_Qcolor=

    g_PS1_signal=
    if (( lastexit > 128 )) && kill -l $(( lastexit - 128 )) > /dev/null
    then
        (( g_PS1_signal = lastexit - 128 ))
        g_PS1_signal="$g_PS1_signal:$( kill -l $g_PS1_signal )"
    fi

    return $lastexit
}

PROMPT_COMMAND=_PS1_command
PS1='[\w $g_PS1_Qcolor$?${g_PS1_signal:+:}$g_PS1_signal\e[0m] # '
Run Code Online (Sandbox Code Playgroud)