Na verdade, acho que isso tem a ver com um delimitador 'caractere não-imprimível' ausente.
Eu tive exatamente o mesmo problema, mas movê-lo antes da nova linha (\ n) não o corrigiu. Em vez disso, rodei corretamente todos os caracteres não imprimíveis (aqui, comandos de coloração) com '\ [' e '\]'.
Ruim (funciona, mas tem o problema de esmagamento de histórico descrito acima):
PS1="\e[32m\u\e[35m@\e[32m\h \e[33m\w\e[36m\n\$\e[0m"
Bom (rodando todos os comandos de cor com '\ [' e '\]' - não mostra o histórico do comando mashed):
PS1="\[\e[32m\]\u\[\e[35m\]@\[\e[32m\]\h \[\e[33m\]\w\[\e[36m\]\n\$\[\e[0m\]"
i.e. "\e[...m" --becomes--> "\[\e[...m\]"
E se você está colocando isso em algo como SecureCRT para enviar automaticamente após o login em um sistema, você pode ter que escapar tudo (colocar barras duplas em todos os lugares) se o sistema de login automático consome a primeira barra invertida para determinar o caractere para ser enviado:
PS1="\[\e[32m\]\u\[\e[35m\]@\[\e[32m\]\h \[\e[33m\]\w\[\e[36m\]\n\$\[\e[0m\]"
i.e. "\..." --becomes--> "\..."
(Isto é definitivamente verdade para o SecureCRT e pode ser verdade para outros, como PuTTY ou TeraTerm - teste requerido de sua parte).