it-swarm-es.com

Configuración de Bash PS1

Estoy tratando de hacer que PS1 esté configurado de la siguiente manera.

 Green = "\ [\ E [32; 1M \]" 
 Red = "\ E [0; 31m" 
 Purple = "\ e [0; 35m" 
 StartColor = "\ [\ e [40m \]" 
 EndColor = "\ [\ e [0m \]" 
 EXPORT PS1 = "$ StartColor $ Green\U @ $ PURPLE\H $ RED\W $ GREEN> $ ENDCOLOR "[.____]

Y tengo algunas preguntas.

  • ¿Cuál es la diferencia entre "[\ e [32; 1M]" y\E [32; 1M "? ¿Son los mismos?
  • Después de ejecutar el comando 'Exportar PS1', funciona bien, pero cuando le doy la entrada de alrededor de 20 caracteres, los caracteres se sobrescriben a medida que adjunto. ¿Qué pasa con esto?
  • ¿Cuál es el significado de StartColor (\ e [40M)/ENDCOLOR (\ E [0M)?

http://a.imageshack.us/img8/606/resultqm.jpg

ADICIONAL

Después de algunas pruebas, obtuve el siguiente cambio podría resolver el problema. Es decir, el formato "\ e" debe reemplazarse por el formato "\ [\ e".

 Red = "\\ e [1; 31m" - no funciona 
 Red = "\ [\ e [1; 31M \]" - trabajando 
9
prosseek

Tengo una función de ayuda para establecer la solicitud, y como no quiero pasar más tiempo para buscar referencias de código de escape, he codificado todos los valores de color de texto en él.

function set_Prompt ( )
{
    # Prompt setup
    # ##################

    # Black            \e[0;30m
    # Blue             \e[0;34m
    # Green            \e[0;32m
    # Cyan             \e[0;36m
    # Red              \e[0;31m
    # Purple           \e[0;35m
    # Brown            \e[0;33m
    # Gray             \e[0;37m
    # Dark Gray        \e[1;30m
    # Light Blue       \e[1;34m
    # Light Green      \e[1;32m
    # Light Cyan       \e[1;36m
    # Light Red        \e[1;31m
    # Light Purple     \e[1;35m
    # Yellow           \e[1;33m
    # White            \e[1;37m

    local COLOR_DEFAULT='\[\e[0m\]'
    local COLOR_BLACK='\[\e[0;30m\]'
    local COLOR_BLUE='\[\e[0;34m\]'
    local COLOR_GREEN='\[\e[0;32m\]'
    local COLOR_CYAN='\[\e[0;36m\]'
    local COLOR_RED='\[\e[0;31m\]'
    local COLOR_PURPLE='\[\e[0;35m\]'
    local COLOR_BROWN='\[\e[0;33m\]'
    local COLOR_GRAY='\[\e[0;37m\]'
    local COLOR_DARK_GRAY='\[\e[1;30m\]'
    local COLOR_L_BLUE='\[\e[1;34m\]'
    local COLOR_L_GREEN='\[\e[1;32m\]'
    local COLOR_L_CYAN='\[\e[1;36m\]'
    local COLOR_L_RED='\[\e[1;31m\]'
    local COLOR_L_PURPLE='\[\e[1;35m\]'
    local COLOR_YELLOW='\[\e[1;33m\]'
    local COLOR_WHITE='\[\e[1;37m\]'

    local PS1_SET_TITLE='\[\e]0;\w\a\]'

    local PS1_SET_TIME="${COLOR_DEFAULT}\t"
    local PS1_SET_RET_CODE="${COLOR_L_RED}(\$?)"
    local PS1_SET_USER="${COLOR_L_GREEN}\[email protected]\h"
    local PS1_SET_PWD="${COLOR_YELLOW}\w"

    local PS1_LN_1="${PS1_SET_TITLE}\n"
    local PS1_LN_2="${PS1_SET_TIME} ${PS1_SET_RET_CODE} "
    local PS1_LN_2="${PS1_LN_2}${PS1_SET_USER} ${PS1_SET_PWD} ${COLOR_DEFAULT}\n"

    echo "${PS1_LN_1}${PS1_LN_2}"
}

Entonces puedes hacer:

PS1=$( set_Prompt )

# Use '#' for root Shell
export PS1=${PS1}'$ '

unset -f set_Prompt

Aquí está el enlace que explica los códigos de terminales VT100: http://www.termsys.demon.co.uk/vtansi.htm

\[ - Comience la secuencia de caracteres que no imprimen
\] - secuencia final de caracteres que no imprimen

  • ¿Cuál es la diferencia entre "[\ e [32; 1M]" y\E [32; 1M "? ¿Son los mismos?

No es lo mismo, y debe ser \[\e[32;1m\]'. Without [] `intentaría imprimir la secuencia en la consola.

  • ¿Cuál es el significado de StartColor (\ e [40M)/ENDCOLOR (\ E [0M)?

StartColor, significa conjunto de fondo en negro, significa endcolor significa restablecer todos los atributos de texto, que significa 'Dame el color de la consola por defecto'

12

Desde el manual de bash:

\[ Comienza una secuencia de caracteres que no imprimen, que podrían usarse para incrustar una secuencia de control terminal en el aviso
\] Termina una secuencia de caracteres que no imprimen

\[ y \] no se pasan al terminal. Le dicen a Bash que los personajes entre ellos no se van a imprimir. Sin ellos, Bash no podía saber que la secuencia siguiendo el carácter de escape (E, G. [32;1m) no ocupa ningún espacio en pantalla, lo que explica por qué no calculó la longitud del indicador correctamente cuando los dejó fuera.

Tenga en cuenta que no ha sido muy consistente en su pregunta (o tal vez es solo un error con el descontento); Necesitas tener una secuencia literal de brackets de barra posterior en $PS1, no solo un soporte (que se mostrará literalmente).

Las secuencias de escape que comienzan con \e son interpretados por el emulador terminal. Están documentados en el secuencias de control Xterm (CTLSEQS) documento (otros emuladores de terminales tienden a ser en su mayoría compatibles). Por ejemplo, \e[32;1m cambia a primer plano audaz y verde; \e[40m cambia el color de fondo a negro; \e[0m Restaura los atributos predeterminados.

La mayoría de los emuladores de terminales modernos pueden usar códigos de escape ANSI para controlar diversos aspectos de la pantalla.

La mayoría de los códigos ANSI comienzan con el código de 2 caracteres ESC- [Ese es el carácter de escape (ASCII decimal 27) seguido del carácter de soporte cuadrado abierto. Esta secuencia también se conoce como el iniciador de la secuencia de control o CSI.

Debido a que el personaje de escape no es uno que pueda escribir directamente (la clave ESC tiene otra aplicación, a menudo específica de la aplicación, los usos) Bash usa '\ E' para referirse a él.

Cambiar el color de texto utiliza el comando ANSI Set Graphics Mode:

\e[<value>m

dónde <value> puede ser una lista de valores separados por semi-4ons (;). Normalmente, solo se usa un valor, aunque el atributo en negrita es útil junto con los atributos de color.

Mirando los valores enumerados en la respuesta de Alexander Pogrebnyak, el 0 o 1 Antes de que la semi-colon seleccione en negrita o no:

\e[1m  # bold
\e[5m  # blink
\e[0m  # all attributes off

Hay una lista útil de los códigos aquí http://ascii-table.com/ansi-escape-sences.php

3
dr-jan