O shell precisa saber quanto espaço o prompt ocupa na tela. Qualquer seqüência de caracteres que não ocupa espaço na tela precisa ser escapada usando \[
e \]
: isso inclui seqüências de escape, como aquelas usadas para definir a cor, ou dar um título ao janela do terminal ou mover o cursor. .
Assim, no seu caso:
export PS1="\[\e[0;32m\][\u@\h \W]\$ \[\e[m\]"
diz ao shell que apenas [\u@\h \W]$
ocupam espaço na tela.