O problema parece ser que não há uma seqüência de escape para redefinir as cores no final do prompt, portanto o texto do comando também é colorido porque o interpretador não sabe onde parar de colorir. Você precisa anexar esta sequência de escape no final do seu prompt \[3[0m\]
. Então, sua sequência de prompt seria algo como:
"${USER_COLOR}\u${WHITE}@${SYSTEM_COLOR}\h ${CYAN}\w ${RED}"'$(rvm_prompt)'"${GREEN}"' $(__git_ps1 "(%s)") '"${WHITE} $\[3[0m\] "
Você pode associar essa sequência a uma variável, adicioná-la à definição da função de prompt e usá-la como nas outras definições de cor:
local RESET="\[3[0m\]"
Assim, o prompt seria:
"${USER_COLOR}\u${WHITE}@${SYSTEM_COLOR}\h ${CYAN}\w ${RED}"'$(rvm_prompt)'"${GREEN}"' $(__git_ps1 "(%s)") '"${WHITE} $${RESET} "
Para ler mais, confira o artigo da Solicitação de bash de cor do Arch Wiki.