Я читал этот 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\$ "
Это делает почти то, что я хочу, кроме случаев, когда я нажимаю Enter, Enter, Enter несколько раз после команды, которая вернула статус!= 0 В этом случае он печатает "Status 1" каждый раз, когда я нажимаю Enter.
Это то, что && RET=0;
часть должна была избавиться.
Кроме того, я не понимаю, почему env | grep RET
показывает только содержимое PS1
. Какова область действия $RET
?