Problema de PS1, CLI en mal estado


16

Hice una simple tarea de PS1

PS1="\e[0;31m[\W]\$ \e[m "

Todo lo que quería hacer era cambiar el color del indicador y mostrar solo la ruta relativa. Sin embargo, esto arruina la CLI. Por ejemplo, cuando explora el historial con el recorte y se superpone a la pantalla. Cuando escribo un comando largo, el cursor se mueve al comienzo de la pantalla superpuesto con la pantalla de solicitud. ¿Qué he hecho mal?

Respuestas:


30

Esto se debe a que bash cree que la solicitud es más larga de lo que es. La secuencia de escape, \e[0;31mpor ejemplo, es absorbida por la terminal, que a su vez convierte el siguiente texto en rojo, pero bash no lo sabe. Por lo tanto, debe decirle a bash que esa secuencia de caracteres no debe contarse en la longitud del indicador, y lo hace al encerrarla \[ \]. También recomiendo usar tput en lugar de codificar secuencias de escape de terminal.

red=$(tput setaf 1)
reset=$(tput sgr0)
PS1='\[$red\][\W]\$\[$reset\] '

Consulte la introducción de BashFAQ 53 y los códigos de terminal (ANSI / VT100) para obtener más información.


1
Gracias por su descripción perfecta. Tuve este problema varias veces y nunca sé dónde estaba el problema.
Betlista

+1, lo mismo aquí. Para aquellos que ciegamente probar esta solución y no funciona, vale la pena mencionar aquí que hay otra sintaxis descrita en el enlace BashFAQ para escapar de colores dentro de las funciones, \001 \002.
Stephen Niedzielski
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.