Parece que o problema foi um pouco mais complicado. O verdadeiro problema era que eu definia minhas cores assim:
[ -z "$TPUT" ] && TPUT=tput
RESET="$( $TPUT sgr0)" # Reset all attributes
BRIGHT="$( $TPUT bold)" # Set “bright” attribute
BLACK="$( $TPUT setaf 0)" # foreground to color #0 - black
RED="$( $TPUT setaf 1)" # foreground to color #1 - red
GREEN="$( $TPUT setaf 2)" # foreground to color #2 - green
YELLOW="$( $TPUT setaf 3)" # foreground to color #3 - yellow
BLUE="$( $TPUT setaf 4)" # foreground to color #4 - blue
MAGENTA="$( $TPUT setaf 5)" # foreground to color #5 - magenta
CYAN="$( $TPUT setaf 6)" # foreground to color #6 - cyan
WHITE="$( $TPUT setaf 7)" # foreground to color #7 - white
FGDEFAULT="$( $TPUT setaf 9)" # default foreground color
export RESET BRIGHT BLACK RED GREEN YELLOW BLUE MAGENTA CYAN WHITE FGDEFAULT
Mas, de acordo com este post , todas as sequências de cores dentro do PS1
linha deve ser colocada dentro de \[
\]
(Eu nem pensei que isso tenha algo a ver com o meu caso, mas descobri o mesmo efeito de sobreposição de histórico, como mencionado nessa questão).
Então eu mudei minhas cores:
[ -z "$TPUT" ] && TPUT=tput
RESET_ESC="\[$( $TPUT sgr0)\]"
BRIGHT_ESC="\[$( $TPUT bold)\]"
BLACK_ESC="\[$( $TPUT setaf 0)\]"
RED_ESC="\[$( $TPUT setaf 1)\]"
GREEN_ESC="\[$( $TPUT setaf 2)\]"
YELLOW_ESC="\[$( $TPUT setaf 3)\]"
BLUE_ESC="\[$( $TPUT setaf 4)\]"
MAGENTA_ESC="\[$( $TPUT setaf 5)\]"
CYAN_ESC="\[$( $TPUT setaf 6)\]"
WHITE_ESC="\[$( $TPUT setaf 7)\]"
FGDEFAULT_ESC="\[$( $TPUT setaf 9)\]"
E o problema (ambos os problemas) desapareceu.