Я очень опаздываю, но проблема в том, что Bash не знает, куда поместить курсор, потому что он интерпретирует специальные символы цветового кода как обычный текст. Это фиксируется путем размещения меток [и] вокруг цветовых кодов. Вместо записи \e[1;31m, чтобы текст был красным, вы должны написать \[\e[1;31m\].
Если у вас возникла эта проблема, тщательно проверьте все цветовые escape-коды, чтобы увидеть, есть ли у них теги вокруг них. [ ! d1]