
Tengo PS1
que termina con una secuencia de colores de apertura (como \[\e[0;32m\]
) para que todo el texto en la terminal sea de color (verde en este caso). Sin embargo, cuando uso un comando como ls
(que tiene el alias ls --color=auto
en my .bashrc
), los colores en la salida están un poco confusos: verde hasta la primera palabra "coloreada" y el siguiente texto sin color es blanco en lugar de verde.
¿Hay alguna manera de tener resultados limpios en todos los casos? Estoy de acuerdo con el blanco como color de texto "predeterminado" cuando la salida tiene colores, pero me gustaría que fuera consistente.
Por supuesto, lo que más me gustaría sería una solución que se aplicara automáticamente a todos los comandos y que no me obligara a cambiar la forma en que los invoco.
Personalmente, no tengo ninguna idea. ¿Quizás se pueda hacer algo para buscar secuencias de escape en la salida "sobre la marcha" y realizar algunas sustituciones? Sin embargo, no sé cómo implementar esto, especialmente para que se haga "detrás de escena".
Respuesta1
La razón es porque lo estás haciendo mal.
Dijiste que tienes una secuencia de colores "abierta" al final del mensaje. Esto está mal. Coloresno anidar. No hay "abrir" ni "cerrar". Es "cambiar a ..." o "restablecer los valores predeterminados" (que en realidad es "cambiar a 0"). Entonces, cuando ls --color=auto
cambie el color de algo cuando esté hecho, emitirá la secuencia para restablecer el valor predeterminado. No se trata de "volver a lo que era antes".
Configure el terminal para que utilice el color de texto que desea que sea "predeterminado" (es decir, paleta número 0). Luego, si desea que su mensaje tenga un color diferente, configúrelo al principio y reinícielo al final.
Para obtener más información, lea el CÓMO del indicador Bash.Capítulo 6. Secuencias de escape ANSI: colores y movimiento del cursordocumentación.
Respuesta2
Como respondimos antes, tener un PS1
final con una secuencia de colores inicial no es una buena idea. Esto hará que la salida de los comandos coloreados sea incorrecta. Si desea que el color de primer plano de su terminal (el color de texto normal) sea verde, simplemente configúrelo en verde en la configuración del emulador de terminal en ambas máquinas; en este caso, la guake
configuración de su terminal. De esta manera, el color de primer plano permanece verde y los comandos con salida en color usarán este color para mostrar texto normal. Restablezca su PS1
mensaje como debería hacerse con \[\e[0m\]
.
Respuesta3
Así es como hago indicaciones de diferentes colores para diferentes máquinas.
case $HOSTNAME in
host1*) PSC="\e[32m" ;;
host2*) PSC="\e[33m" ;;
host3*) PSC="\e[34m" ;;
host4*) PSC="\e[35m" ;;
*) PSC="\e[36m" ;;
esac
PS1="[\j]\[${PSC}\]\u@\h(\l) \[\e[37m\][ \w ]\[\e[00m\]\n\[\e[1m\]\#\[\e[0m\] \$ "
El resto lo puedes adaptar al gusto. Coloque una copia de este ~/.bashrc en cada máquina que utilice. Si utiliza una casa montada en NFS, es simplemente automático.