Vamos limpá-lo um pouco e torná-lo mais portátil. Em geral, é melhor usar tput
para gerar as seqüências de controle em vez de codificá-las, conforme descrito em FAQ 53 de Bash . Desta forma, é muito mais fácil encontrar o seu \]
em falta.
red=$(tput setaf 1)
green=$(tput setaf 2)
yellow=$(tput setaf 3)
white=$(tput setaf 7)
reset=$(tput sgr0)
PS1="\[$red\][\[$yellow\]\A\[$red\]] \u:\[$green\]\W\[$white\]\$\[$reset\] "
Observe que substituí sua invocação de date
pelo prompt de escape interno \A
que exibe a mesma coisa (24 horas em HH:MM
format).
Há uma ressalva com essa abordagem, conforme descrito na FAQ relacionada ao Bash, em que a saída seria distorcida se alguma das seqüências de controle tput
gerasse algo que contivesse uma fuga de prompt. Eu nunca encontrei esse problema, então eu geralmente o ignoro.