bash prompt desordenado en flecha arriba

0

He realizado algunas modificaciones en mi solicitud con el uso de colores a través de tput.

Parece que ahora cuando trato de hacer una arrow upbúsqueda después de algunos movimientos hacia arriba, el indicador se reduce a la mitad, lo que quiero decir con esto es:

De esto:

PROD mysuer@server1.domain.com:~$ vim .bashrc

A esto:

PROD mysuer@servegit rebase origin/add_pool

ctrl + c trae todo de vuelta a la normalidad.

He encontrado algunas publicaciones que indican que esto puede deberse al problema con los escapes que faltan, [sin embargo, no veo un problema aquí:

Mi código:

#red for prod, green for lab

COLOUR_RESET=$(tput sgr0)
COLOUR_GREEN=$(tput setaf 2)
COLOUR_BLUE=$(tput setaf 6)
COLOUR_YELLOW=$(tput setaf 3)
COLOUR_RED=$(tput setaf 1)
BOLD=$(tput bold)

if [[ $HOSTNAME =~ .*\.domain.com$ ]]; then
  COLOUR=$COLOUR_RED
  PROMPT_TEXT="PROD"
fi

if [[ $HOSTNAME =~ .*\.lab$ ]]; then
  COLOUR=$COLOUR_BLUE
  PROMPT_TEXT="LAB"
fi


MYPROMPT="$COLOUR$BOLD$PROMPT_TEXT$COLOUR_RESET \[\u@$COLOUR$BOLD$(hostname -f)$COLOUR_RESET:\w\]\$ "

PS1=$MYPROMPT

ACTUALIZACIÓN: @KamilMaciorowski ha señalado una pregunta similar, aunque no se relacionaba con los colores de tput.

MMT
fuente
@KamilMaciorowski es un poco diferente, aunque gracias a tu otra publicación pude reducirlo al hecho de que el problema con las variables de inyección particularmente PROMPT_TEXT=aunque tuve que cambiar el$MYPROMPT='${debian_chroot:+($debian_chroot)}\[\033[01;31m$($PROMPT_TEXT)\]\[\033[00m\] \[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
MMT

Respuestas:

1

Mi respuesta en otro lado es casi suficiente, debes ajustar la salida de tputin \[ \].

Casi suficiente, porque ya tienes \[ \]en lugares equivocados ; Deberías deshacerte de ellos. man 1 bashdice:

\[
comenzar una secuencia de caracteres que no se imprimen, que podrían usarse para incrustar una secuencia de control de terminal en la solicitud

\]
finalizar una secuencia de caracteres que no se imprimen

Esto significa que, por ejemplo, $(hostname -f)debe estar fuera de cualquier \[ \]. Entonces tampoco

  • eliminar \[y \]de la MYPROMPTdefinición explícita y reemplazar cada =$(tput …)con ='\['"$(tput …)"'\]';

o

  • cambia solo la MYPROMPTdefinición. Ajusté tu original:

    MYPROMPT="\[$COLOUR$BOLD\]$PROMPT_TEXT\[$COLOUR_RESET\] \u@\[$COLOUR$BOLD\]$(hostname -f)\[$COLOUR_RESET\]:\w\$ "
    # printing                ^^^^^^^^^^^^                 ^^^^                ^^^^^^^^^^^^^^                 ^^^^^^
    # non-pr.   ^^^^^^^^^^^^                ^^^^^^^^^^^^^        ^^^^^^^^^^^^                  ^^^^^^^^^^^^^
Kamil Maciorowski
fuente
-1

Al final tuve que soltar los colores de tput.

Mi último aviso:

if [[ $HOSTNAME =~ .*\.domain.com$ ]]; then
  PROMPT_TEXT="PROD"
  PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]$PROMPT_TEXT\[\033[00m\] \[\033[01;32m\]\u@\H\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
fi

if [[ $HOSTNAME =~ .*\.lab$ ]]; then
  PROMPT_TEXT="LAB"
  PS1='${debian_chroot:+($debian_chroot)}\[\033[01;34m\]$PROMPT_TEXT\[\033[00m\] \[\033[01;32m\]\u@\H\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
fi
MMT
fuente