我正在读这个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