См. этот вопрос SO для решения, использующего переменную $ PROMPT_COMMAND
.
Напишите в нем имя функции, которая будет вызываться каждый раз перед отображением нового приглашения. Если вы установите PS1
в этой функции, вы можете решить свою проблему и иметь цветовые команды в функциях:
# ... Using your highlight and highlight_error functions ...
prompt(){
exit_code=${?}
PS1="\u@\h \$ "
if [[ $exit_code != 0 ]];then
PS1="$(highlight_error "($exit_code)") $PS1"
fi
}
PROMPT_COMMAND="prompt"