La línea se sobrescribe en lugar de continuar en la misma línea

La línea se sobrescribe en lugar de continuar en la misma línea

Tengo un problema con el indicador de bash. Cuando escribo un comando que excede la longitud del ancho de la pantalla, continúa en la misma línea y sobrescribe lo que he escrito, y luego continúa en la línea 2.

Esta es mi PS1:

PS1="\$(git_prompt) ${BIWhite}\W${Color_Off} → "

las variables

BIWhite='\e[1;97m'
Color_Off='\e[0m'

Y luego el script para git_prompt:

git_prompt() {
local g="$(__gitdir)"
if [ -n "$g" ]; then
    local MINUTES_SINCE_LAST_COMMIT=`minutes_since_last_commit`
    if [ "$MINUTES_SINCE_LAST_COMMIT" -gt 30 ]; then
        local COLOR=${BRed}
    elif [ "$MINUTES_SINCE_LAST_COMMIT" -gt 10 ]; then
        local COLOR=${BIYellow}
    else
        local COLOR=${BGreen}
    fi
    local SINCE_LAST_COMMIT="${COLOR}$(minutes_since_last_commit)m${Color_Off}"
    # The __git_ps1 function inserts the current git branch where %s is
    local GIT_PROMPT=`__git_ps1 "(%s|${SINCE_LAST_COMMIT})"`
    echo ${GIT_PROMPT}
fi}

¡Agradezco toda la ayuda! ¡Gracias!

Respuesta1

Los caracteres que no mueven el cursor deben estar encerrados entre \[y \]en PS1; de lo contrario, bash cree que el mensaje es más largo de lo que realmente es. Y debido a la forma en que se usa esta variable, no puede tener una función que emita texto en color ya que no puede escapar de él correctamente.

Verhttp://mywiki.wooledge.org/BashFAQ/053para más explicaciones.

información relacionada