prompts personalizar kali color change bashrc bash command-prompt gentoo

bash - personalizar - linux prompt colors



El aviso Custom Bash se sobrescribe a sí mismo (3)

1) Me gustaría saber por qué está sobrescribiendo mi mensaje

Debido a que todos los caracteres no imprimibles tienen que ser escapados por /[ y /] contrario readline no puede hacer un seguimiento de la posición del cursor correctamente.

Debe poner /[ y /] alrededor de las secuencias de escape que no sean de impresión en su mensaje.
Sin ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/[ Comience una secuencia de caracteres que no sean de impresión. (como secuencias de escape de color). Esto permite a bash calcular el ajuste de palabras correctamente.

/] Finaliza una secuencia de caracteres no imprimibles. - BashFAQ

... tenga en cuenta los escapes de los caracteres que no se imprimen, estos aseguran que readline pueda hacer un seguimiento de la posición del cursor correctamente. - ss64.com

2) Cómo solucionar este problema cuando se usa la función

Si realmente necesita / desea establecer colores dentro de la función cuyo resultado se utiliza en PS , tiene 2 opciones:

echo -e no tiene conocimiento de bash''s /[ /] por lo que debe sustituirlos por códigos de control ASCII /001 y /002 para delimitar los caracteres no imprimibles de imprimible:

function formattedGitBranch { echo -e "/001/e[0;91m/002 ($_branch)"; } PS1=''$(formattedGitBranch) ''

Estoy usando el prompt bash personalizado para mostrar la rama git.

Todo está en /etc/bash/bashrc :

function formattedGitBranch { _branch="$(git branch 2>/dev/null | sed -e "/^/s/d" -e "s/^/*/s//")" # tried these: echo -e "/e[0;91m ($_branch)" echo -e "/e[0;91m ($_branch) /e[m" echo -e $''/e[0;91m''"($_branch)" echo "($_branch)" echo "$(tput setaf 2) ($_branch) $(tput setaf 9)" printf "/e[0;91m ($_branch)" } # color is set before function call PS1=''/[/033[01;34m/] /[/033[0;91m/]$(formattedGitBranch) /$/[/033[00m/] '' # color is set inside function PS1=''/[/033[01;34m/] $(formattedGitBranch) /$/[/033[00m/] ''

El problema es que cuando configuro el color para $_branch en la función, mi mensaje se sobrescribirá cuando se alcance la EOL:

tput todas las variantes posibles tput , printf , $'''' notación.

Resolví el problema configurando el color solo en PS1 :

Pero..

  1. Me gustaría saber por qué está sobrescribiendo mi mensaje
  2. Cómo solucionar este problema cuando se usa la función

Estoy usando Gentoo Linux. GNU bash, verze 4.2.37(1)-release (i686-pc-linux-gnu)


Cadenas como /e[0;91m necesitan /e[0;91m adicionales para evitar que bash calcule su longitud.

Adjunte estas cadenas desde formattedGitBranch en /[ & /] como, /[/e[0;91m/]

Lo has hecho correctamente en otros lugares. Solo me lo perdí en formatoGitBranch.


Tienes que ocuparte de los caracteres no imprimibles dentro de [/ y /]; de lo contrario, podrías tener el cursor justo encima del símbolo del sistema como compartido en la pregunta, así que encontré algo y simplemente lo compartí: -

Para obtener el cursor después de la salida de PS1 en la misma línea:

algunos ejemplos:

PS1=''[/u@/h:/w]/$ PS1=''[/[/033[0;32m/]/u@/h:/[/033[36m/]/W/[/033[0m/]]/$ ''

Refer Link: sintaxis para bash PS1