Shell Línea de información Emisión de envolver
-
16-09-2019 - |
Pregunta
He hecho algo para romper mi Prompt de Bash en OS X (10.5.7) Terminal.
Este es el PS1 que había configurado:
PS1='\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]\$ '
Por lo que yo puedo decir que tengo los comandos de color escapar correctamente. Sin embargo, cuando me desplazarse hacia arriba y hacia abajo en mi historial de comandos A menudo recibo problemas de ajuste de línea si los comandos históricos envuelven en varias líneas.
Simplifiqué mis instrucciones para 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 he intentado \033
en lugar de \e
. Acabo incluido PS2 allá arriba para obtener información, no he cambiado desde que la instalación por defecto. Si elimino por completo los códigos de color a continuación, todo funciona bien, alguna idea?
Solución
Los problemas en el ajuste de línea Bash no son nada nuevo. Consulte la lista de correo, tal vez hay otro error con respecto a este.
No se puede hacer mucho más que el etiquetado de caracteres no imprimibles, el resto debe ser realizada por el código que provocó.
Otros consejos
Ahora estoy usando este PS1 con buenos resultados:
green=$(tput setaf 2)
blue=$(tput setaf 4)
bold=$(tput bold)
reset=$(tput sgr0)
PS1="\[$green$bold\]\h\[$reset\]:\[$blue$bold\]\w\[$reset\]\$ "
Desplazamiento a través de mi historial de comandos aparece para manejar la línea envuelve ahora. Sin embargo, mientras tanto, ya que esta pregunta se hizo también he actualizado mi OS X 10.6.3 a
Este hilo stackOverflow parece relevante. Como alguien señalar a este hilo, la Bash preguntas frecuentes en mywiki.wooledge.org explica cómo citar correctamente los códigos de color en indicaciones del golpe ( FAQ 53 ), y la invocación adecuada de colores terminales ( FAQ 37 ).
Parece que ha escapado correcta y secuencias adjunto.
Una solución que utilizo de todos modos para añadir un '\ n' al final. Me resulta más clara y reducir cualquier problema con los problemas de embalaje. Al final exacto de mi PS1 es:
'\n\[\033[0;30m\]$\[\033[0m\]
excelente COMO probablemente sabe:
Esta es la mía: es el mejor que he encontrado, pero el sitio donde originalmente encontré que le faltaba un carácter de escape, lo que lleva a la cuestión de ajuste de línea. Yo vanamente con él y finalmente lo consiguió trabajo. Muestra su usuario, ruta, y la información de la rama con un buen contraste, el color se refiere.
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, agregue
GIT_PS1_SHOWDIRTYSTATE=true
Para mostrar un marcador cuando una rama es "sucio" (cambios que se comprometan existir)
export HISTCONTROL=ignoredups
También es útil para ignorar los duplicados cuando se desplaza a través de la historia bash.
bind "set completion-ignore-case on"
también ayuda.
Por último,
shopt -s checkwinsize
Puede ser útil en OSX si los problemas persisten.
Me di cuenta de que hay algunos problemas con el indicador de la posición del cursor, incluso si no hay caracteres especiales en la variable de entorno o PS1
PROMPT
.
Si la salida que un archivo que no tiene un caracter de fin de línea al final. Se va a confundir el símbolo.
Puede reproducir este haciendo:
curl https://gist.githubusercontent.com/martinos/d4aa0a7d4d752b0d0d9f/raw/3198c39f84a080c44227a084a19fb3a0bb661ee5/wrapping_issue.txt
y pulsando el botón Arriba tecla varias veces y verá que el símbolo se confunden.
Se puede ver un ejemplo de esto en acción:
https://asciinema.org/a/9mtjhi9dib6md4ocsbw210cca
Cuando esto ocurre, sólo tiene que pulsar el símbolo <CTRL-C>
y va a volver a la normalidad.
Tenga en cuenta que ZShell no tiene este problema.
En el futuro, esto es lo que yo uso:
export PS1="\[\033[0;31m\][\u@Project:\w]$\[\033[0m\] "
Esto mostraría mi intérprete de comandos como:
[ec2-user@Project:~]$
Me ayuda a distinguir entre los sitios en vivo y dev.
'shopt -s checkwinsize también funciona para envolver Cygwin problemas también
Si está utilizando el truco "\e]2;titlebar\a"
barra de título, asegúrese de escapar de eso también: "\[\e]2;titlebar\a\]"