¿Por qué este indicador bash actuando de manera extraña / desaparecer, y cómo puedo solucionarlo (OS X)?

StackOverflow https://stackoverflow.com/questions/706750

  •  22-08-2019
  •  | 
  •  

Pregunta

Tengo que reconocer que yo uso un indicador bash un poco largo aliento:

--(username)-(Wed April 01|12:00:00)--(~ $

Recientemente, tuve la brillante idea de cambiarlo por lo que dependiendo del valor de salida del comando anterior, si el éxito, los elementos interiores de la () 's sería verde, y si fracaso, que sería de color rojo. Lo tengo trabajo en su mayor parte (algunos estados de salida impares cambiarán el color a otra cosa, pero estoy bien con ella), pero cuando se escribe un comando que es más de una línea, y hace que el terminal para desplazarse, la Desaparecerá el mensaje! Mi pronta funcionó bien cuando no había color, así que supongo que tiene que ver con mi escape de color, y en particular a mi no cerrada [ 's, pero no puedo precisarlo.

#.profile
export PS1='--(\e[$((32-${?}))m\u\e[0m)-(\e[$((32-${?}))m\d\e[0m|\e[$((32-${?}))m\T\e[0m)--(\e[$((32-${?}))m\w\e[0m \$ '

Gracias de antemano!

¿Fue útil?

Solución

este debería resolver su problema.

Esto parece funcionar para me*:

export PS1='--(\[\e[$((32-${?}))m\]\u\[\e[0m\])-(\[\e[$((32-${?}))m\]\d\[\e[0m\]|\[\e[$((32-${?}))m\]\T\[\e[0m\])--(\[\e[$((32-${?}))m\]\w\[\e[0m\] \$ '

* bueno, en realidad export PS1='\u@\h:\w\$ ' funciona para mí

Para citar el mensaje relacionado, la respuesta se encuentra en la adición de \ [y \] en torno a todas las secuencias de color en su declaración PS1:

  

Antes de que tuviera el siguiente valor para PS1:

     

'\ e [0; 34m \ h: \ w [] \ $ \ e [0m'

     

lo que me dio un buen indicador azul de la siguiente forma

     

nombre de host: Trabajo de directorio [-número de comando] $

     

Sin embargo, tuve el mismo problema al ajuste de líneas de haberlo hecho. La solución fue insertar \ [y \] alrededor del ANSI escapa para que el shell sabe que no debe incluirlos en el cálculo de la línea de embalaje. Esto da como resultado el siguiente valor para PS1:

     

'\ [\ e [0; 34m \] \ h: \ w [] \ $ \ [\ e [m \]'

Otros consejos

http://mywiki.wooledge.org/BashFAQ/053 - tengo un símbolo de lujo con colores, y ahora no parece bash para saber cómo mi terminal es amplia . Líneas envuelven de forma incorrecta.

Por cierto; para tu referencia; aquí está mi PS1 que se parece a esto: texto alternativo
(fuente: lyndir.com )

\[$reset$bold$green\]\u@\h\[$blue\] \W \[$red\]${?/#0/\[$green\]}\$\[$reset\]

Observe cómo pongo todos los códigos de color en $parameters para que sea más ordenado, pero lo más importante, porque usted debe utilizar tput para generarlos . Ver:

http://mywiki.wooledge.org/BashFAQ/037 -? Cómo puedo imprimir texto en varios colores

Declaro mis parámetros de color en una secuencia de comandos de utilidad que obtiene proceden de mi ~/.bashrc ( y las secuencias de comandos que escribo) que se llama bashlib .

En una nota final; poner su definición PS1 en ~/.bashrc y no export ella. No hay absolutamente ninguna razón por la que debe agregar su definición PS1 con el medio ambiente de cualquier y todos los procesos desovar de su cáscara.

Sólo parece que faltan los soportes de inicio y final alrededor de los escapes (antes de la primera '\ e' y después de la última 'm'):

PS1='--(\[\e[$((32-${?}))m\u\e[0m)-(\e[$((32-${?}))m\d\e[0m|\e[$((32-${?}))m\T\e[0m)--(\e[$((32-${?}))m\w\e[0m\] \$ '

Como se ha mencionado, el PS1 var no tiene por qué ser exportados:. Sólo su cáscara tiene que verlo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top