colores color change bashrc bash colors prompt ansi-escape

bash - color - Problema de envoltura de la línea de solicitud de Shell



colors bash prompt (9)

''shopt -s checkwinsize'' también funciona para problemas de envoltura Cygwin también

He hecho algo para romper mi indicador Bash Shell en el terminal OS X (10.5.7).

Esta es la PS1 que configuré:

PS1=''/[/e[1;32m/]/h/[/e[0m/]:/[/e[1;34m/]/w/[/e[0m/]/$ ''

Por lo que puedo decir, tengo los comandos de color escapando correctamente. Sin embargo, cuando me desplazo hacia arriba y hacia abajo en mi historial de comandos, a menudo tengo problemas con el ajuste de línea si los comandos históricos se envuelven en varias líneas.

Simplifiqué mis indicaciones a lo siguiente:

PS1=''/[/e[1m/]/h:/w/$ /[/e[0m/]'' PS2=''> ''

Y todavía veo algo como:

localhost:~/Library/Application Support/Firefox/Profiles/knpmxpup.Defau lt/extensions/{1A2D0EC4-75F5-4c91-89C4-3656F6E44B68}$ expocd /{1A2D0EC4-7 5F5-4c91-89C4-3656F6E export PS1="/[ /e[1;32m/]/h/[/e[0m/]: cd Library/Appl ication/ Support/

También probé /033 lugar de /e . Acabo de incluir PS2 allí para obtener información, no he cambiado eso desde el valor predeterminado de instalación. Si elimino por completo los códigos de color, todo funciona bien, ¿alguna idea?


Ahora estoy usando esta PS1 con buen efecto:

green=$(tput setaf 2) blue=$(tput setaf 4) bold=$(tput bold) reset=$(tput sgr0) PS1="/[$green$bold/]/h/[$reset/]:/[$blue$bold/]/w/[$reset/]/$ "

El desplazamiento a través de mi historial de comandos parece manejar las modificaciones de línea ahora. Sin embargo, mientras tanto, desde que se hizo esta pregunta, también actualicé mi OS X a 10.6.3.


Aquí está el mío: es el mejor que he encontrado, pero el sitio donde lo encontré originalmente faltaba un carácter de escape, lo que llevó al problema del ajuste de línea. Lo retoqué y finalmente lo puse en funcionamiento. Muestra su información de usuario, ruta y rama con buen contraste, en cuanto a los colores.

export PS1=''/[/e[1;37m/]/[/e[1;32m/]/u/[/e[0;39m/]:/[/e[1;33m/]/w/[/e[0;39m/]/[/e[1;35m/]$(__git_ps1 " (%s)")/[/e[0;39m/] /[/e[1;37m/]|/[/e[0;39m/]/$''

Además, agrega

GIT_PS1_SHOWDIRTYSTATE=true

Para mostrar un marcador cuando una rama está "sucia" (existen cambios para comprometerse)

export HISTCONTROL=ignoredups

También es útil para ignorar los duplicados cuando se desplaza hacia arriba en el historial de bash.

bind "set completion-ignore-case on"

Ayuda también

Finalmente,

shopt -s checkwinsize

Puede ser útil en OSX si los problemas persisten.


Los problemas de envoltura de línea en Bash no son nada nuevo. Consulte la lista de correo, tal vez haya otra falla con respecto a esto.

No puede hacer mucho más que etiquetar caracteres no imprimibles, el resto debe hacerse con el código de aviso.


Noté que hay algunos problemas con el posicionamiento rápido del cursor incluso si no hay un carácter especial en la variable de entorno PS1 o PROMPT .

Si sacamos un archivo que no tiene un final de línea al final. Confundirá el aviso.

Puedes reproducir esto haciendo:

curl https://gist.githubusercontent.com/martinos/d4aa0a7d4d752b0d0d9f/raw/3198c39f84a080c44227a084a19fb3a0bb661ee5/wrapping_issue.txt

y presionando la tecla de subir varias veces y verá que el mensaje se confunde.

Puedes ver un ejemplo de esto en acción:

https://asciinema.org/a/9mtjhi9dib6md4ocsbw210cca

Cuando esto ocurre, simplemente presione <CTRL-C> y el aviso volverá a la normalidad.

Tenga en cuenta que ZShell no tiene este problema.


Para referencia futura, esto es lo que uso:

export PS1="/[/033[0;31m/][/u@Project:/w]$/[/033[0m/] "

Esto mostraría mi solicitud de shell como:

[ec2-user@Project:~]$

Me ayuda a distinguir entre sitios en vivo y desarrolladores.


Parece que ha escapado correctamente y ha incluido secuencias.

Una solución alternativa que uso de todos modos es agregar una ''/ n'' al final. Lo encuentro más claro y disminuyo cualquier problema con problemas de envoltura. El final exacto de mi PS1 es:

''/n/[/033[0;30m/]$/[/033[0m/]

Un excelente howto que probablemente conozcas:

Bash prompt howto


Si está utilizando el truco de la barra de título "/e]2;titlebar/a" , asegúrese de escapar también: "/[/e]2;titlebar/a/]"