5 votos

El prompt de la terminal 'guarda' ciertos comandos al subir la flecha

He añadido un poco de shell scripting a mi prompt por diversión. Alterna los colores de los elementos del prompt de forma aleatoria. Lo hice puramente porque una pantalla gris se vuelve aburrida después de un tiempo. Lo siguiente es mi prompt 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 indicador. Sí.

El problema es que a veces la cáscara se "atasca". Por ejemplo, la cáscara suele ser así:

directory
[username]->

Si he ejecutado recientemente el docker run y subo a la historia, `docker run se atasca y termino con esto:

directory
[username]->docker run

Si añado un nuevo comando se apila 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 docker-run comando de nuevo a menos que lo escriba todo. ¿Qué podría estar causando este error? He revisado bastante mi prompt y creo que está bien, pero fue confuso de entender en primer lugar.

2voto

John N Puntos 400

No estás escapando los caracteres no imprimibles en tu prompt. Ver este artículo y utilizar " \[ " y " \] " alrededor de los colores, algo así (no probado) por ejemplo...

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

Puede que tengas que ajustar eso. Como he dicho, esto no se ha probado, así que puede que haya insertado un " \] " en medio de un código de colores. En mi caso, hago el escape cuando inicializo las variables de color:

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

Por si sirve de algo, recomiendo encarecidamente el uso de tput cuando se trata de códigos de control. Hace que tus scripts sean más portables, y (IMHO) es más fácil de leer.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X