Mensaje de la terminal 'guardando' ciertos comandos en la flecha arriba

5

Agregué un poco de shell scripting a mi mensaje para divertirme. Alterna los colores de los elementos de solicitud al azar. Lo hice simplemente porque una pantalla gris se vuelve aburrida después de un tiempo. El siguiente es mi mensaje en .bash-profile:

function next_hue
{
    color1=$((31 + (++color % 7)))   # set 31 to 30 for dark on light
    color1=$((31 + (++color % 7)))
    PS1="\n\e[0:${color}m[\W]\n\e[0:${color}m[\u]-> $reset" # set 1 to 0 for     dark on light
}

Esto alterna el color de mi aviso. Yay!

El problema es que a veces el shell se "atasca". Por ejemplo, el shell suele ser así:

directory
[username]->

Si recientemente ejecuté el comando docker run y subí la flecha hacia el historial, la ejecución de la ventana acoplable se atasca y termino con esto:

directory
[username]->docker run

Si agrego un nuevo comando, se acumula en docker run :

directory
[username]->docker runcd /some/path

Tengo que usar ctrl-c o alguna otra opción similar, y no puedo usar el comando docker-run nuevamente a menos que lo escriba todo. ¿Qué podría estar causando este error? He revisado mi mensaje un poco y creo que está bien, pero fue confuso resolverlo en primer lugar.

    
pregunta user148621 26.09.2015 - 02:22

1 respuesta

2

No estás escapando de los caracteres que no se imprimen en tu solicitud. Vea este artículo y use " \[ " y " \] " alrededor de los colores, algo como esto (sin probar ) por ejemplo ...

PS1="\n\e[0:\[${color}\]m[\W]\n\e[0:\[${color}\]m[\u]-> $reset"

Es posible que tengas que modificar eso. Como he dicho, esto no se ha probado, por lo que es posible que haya insertado un " \] " en medio de un código de color. Para mi aviso, hago el escape cuando inicializo las variables de color:

PS1_FG="\[$(tput setaf 223)\]"  # Prompt foreground colour (223 = pale orange/brown)

Por lo que vale, puedo recomendar encarecidamente el uso de tput cuando se trata de códigos de control. Hace que sus scripts sean más portátiles, y (IMHO) es más fácil de leer.

    
respondido por el John N 08.12.2016 - 11:32

Lea otras preguntas en las etiquetas