
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.