Bash shell 提示:$RET 在哪里?

Bash shell 提示:$RET 在哪里?

我正在读这个https://wiki.archlinux.org/index.php/Color_Bash_Prompt 最终得到如下结果:

# Stores the status of each command in $RET
PROMPT_COMMAND='RET=$?;'

# A colour.
RED_SHELL='\e[0;36m'

# Prints "Status 1" if RET is 1, for example.
RET_VISUALISE='$(if [[ $RET != 0 ]]; then echo -ne "Status \[$RED_SHELL\]$RET\n" && RET=0; fi;)'

# What to print for each prompt.
PS1="$RET_VISUALISE\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \t \[\e[33m\]\w\[\e[0m\]\n\$ "

这几乎满足了我的要求,除了当我在返回状态 != 0 的命令后多次按下 Enter、Enter、Enter 时。在这种情况下,每次我按下 Enter 时都会打印“状态 1”。

这就是该&& RET=0;部分应该去掉的东西。

另外,我不明白为什么env | grep RET只显示PS1内容。 的范围是什么$RET

答案1

当打印下一个提示而中间没有执行任何命令时,您将用覆盖您的RET=0。返回最后执行的命令的返回值,并且它仍然是。RET=$?$?1

Bash 允许您捕获执行命令中的错误并执行代码以响应该错误(一次):

function err_handle {
    RET=$?
    if [[ $RET != 0 ]]; then
        echo -ne "Status $RED_SHELL$RET\n"
    fi
}
trap 'err_handle' ERR

相关内容