2009-04-01 7 views
10

Admito que utiliza un símbolo del fiesta un poco largo aliento:¿Por qué este prompt bash actúa de manera extraña/desapareciendo, y cómo lo arreglo (OS X)?

--(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 los() sería verde, y si falla, sería rojo. Lo conseguí trabajando en su mayor parte (algunos estados de salida impares cambiarán el color a otra cosa, pero estoy de acuerdo), pero al escribir un comando que es más de una línea, y hace que la terminal se desplace, el ¡la indicación desaparece! Mi mensaje funcionó bien cuando no había color, así que supongo que está relacionado con mi escapado de color, y particularmente con mi versión no cerrada, 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!

Respuesta

34

Parece que this debería solucionar su problema.

Esto parece funcionar para mí *:

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='\[email protected]\h:\w\$ ' funciona para mí

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

Antes tenía el siguiente valor para PS1:

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

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

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

Sin embargo, tuve el mismo problema de alineación de líneas que usted. La solución consistía en insertar \ [y \] alrededor de los ANSI para que el shell no los incluya en el cálculo del ajuste de línea. Esto da como resultado el siguiente valor para PS1:

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

+2

Chas, solo mirando ese mensaje me enrojezco los ojos. Gracias por su ayuda, señor! La tuya fue la única solución que pareció funcionar por completo. –

+0

Después de cambiar el color de mi mensaje (en Linux, no en OSX), tenía problemas para buscar hacia atrás en mi historial. Esto resolvió mi problema. ¡Gracias! – Mark

6

http://mywiki.wooledge.org/BashFAQ/053 - Tengo una sugerencia elegante con colores, y ahora bash no parece saber qué tan ancho es mi terminal. Las líneas se envuelven incorrectamente.

Por cierto; para tu referencia; aquí está mi PS1 que se parece a esto: alt text http://lhunath.lyndir.com/stuff/PS1.png

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

Aviso cómo me 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 un script de utilidad que se obtiene por my ~/.bashrc (y cualquier script que escriba) que se llama bashlib.

En una nota final; ponga su definición PS1 en ~/.bashrc y no lo haga export. No hay absolutamente ninguna razón por la que deba agregar su definición PS1 al entorno de todos los procesos que genera de su caparazón.

1

Sólo parece que faltan los soportes inicial 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 lo hace necesita ser exportado: solo su caparazón necesita verlo.

Cuestiones relacionadas