Use a variável de ambiente Bash $ PROMPT_COMMAND para redefinir a variável $ PS1 antes de o prompt ser exibido.
LIGHTRED='3[1;31m'
LIGHTGREEN='3[1;32m'
RESET='3[m'
__foo () {
# Do some stuff and genereate a string to echo in different colours:
echo -n "\[$1\]firstcolour \[$2\]secondcolour"
}
PROMPT_COMMAND=$PROMPT_COMMAND'; PS1="$(__foo $RED $GRN)\[$OFF\]\n\$ "'
Note que duas alterações adicionais que fiz no seu código são opcionais aqui. Eles foram adicionados porque eu acho que isso esclarece onde / onde os códigos de escape não são expandidos:
- Aspas duras
'
em torno das variáveis de definição de cores. - Aspas suaves
"
ao redor da string de retorno para__foo