sábado, 20 de marzo de 2021

Colorear bash en .bashrc

Hola, este manual va para quienes usan la terminal. Por defecto la terminal usa el color blanco, todo en un solo color, y como se puede ver es muy difícil diferenciar donde esta el prompt, donde esta la orden que se ejecutado, donde el resultado, etc... es un poco caótico. 

Personalmente, prefiero tener varios colores distintos en la consola, para de esta forma ver la información mucho mas rápidamente.
vamos a ver como personalizar la consola y el prompt en bash.

Introducción

yo uso mucho la terminal para conectarme con otras computadoras por ssh. Realmente es muy incómodo el tener varias sesiones abiertas en cada pc y tener que leer el prompt para saber de cual se trata. 

  diego@usuariodebian:/etc$  

Un problema que me aparece mucho, es cuando uso el comando de ayuda  --help y si la ayuda es muy extensa, que coge mas de una pantalla. tengo que volver con el scroll para atrás, y no siempre puedo encontrar donde esta la línea de comando que use para la ayuda. 

Ese problema se soluciona coloreando el prompt, de modo que sea fácilmente distinguible cuando es una línea de comando y cuando es la salida del mismo lo que vemos en la terminal. 
También puse colores distintos a los nombres de las distintas computadoras así, me doy cuenta cuando es que estoy en una consola local y cuando estoy en una consola remota. La última mejora es cambiar el color de usuario root por un inconfundible color: rojo peligro así como también el carácter # del mismo color rojo peligro, solo para saber cuando estoy usando el usuario root y cuando el usuario normal, ya que la vista es mas rápida que la lectura.


Información sobre el Bash

La información sobre bash se encuentra en el archivo oculto .bashrc en el home de cada usuario (incluido root).
Para cambiar el prompt tenemos que editar (o agregar) la línea que arranca con PS1=" "

A continuación veremos las opciones que podemos usar.
Las secuencias de escape:

\a ASCII bell character (07)
\d fecha como "dia mes fecha" ("mar May 26"
\D{format} fecha
\e ASCII escape character (033)
\h nombre del host hasta el primer punto
\H nombre del host
\j numero de trabajos manejados por el shell
\l the basename of the shell's terminal device name
\n nueva linea
\r Volver al principio
\s nombre del shell
\t hora en 24-horas con segundos (HH:MM:SS)
\T hora en 12-horas (AM/PM) con segundos
\@ hora en 12-horas (AM/PM)
\A hora en 24-horas (HH:MM)
\u usuario actual
\v version de bash
\V release de bash
\w directorio actual en version completa (con la ruta) con el home como ~
\W directorio actual en versión corta (solo el nombre) con el home como ~
\! Numero de comando en el historial
\# Numero de comando
\$ Muestra # para root, $ para los usuarios
\nnn caracter correspondiente al octal nnn
\ \ barra invertida
\[ principio de secuencia de caracteres no imprimibles
\] final de secuencia de caracteres no imprimibles



===========================================================
NOTA IMPORTANTE:
- Las opciones marcadas en rojo (\u \h \w \$) son las opciones usadas por defecto en bash
- Las últimas 2 opciones ( \[     \] ), si no las tenemos en cuenta se nos pone loco el prompt a la hora de borrar o autocompletar.
===========================================================

Los colores son:

 NEGRO 0;30                                        
  GRIS 1;30                                            
  ROJO 0;31                                           
  ROJO CLARO 1;31                             
  VERDE 0;32                                         
  VERDE CLARO 1;32                           
  MARRON 0;33                                     
  AMARILLO 1;33                                  
  AZUL 0;34                                            
  AZUL CLARO 1;34                              
  VIOLETA 0;35                                      
  VIOLETA CLARO 1;35                        

  CYAN 0;36                                           
  CYAN CLARO 1;36                             
  BLANCO CLARO (osea GRIS) 0;37  
  BLANCO 1;37                                     



Por Defecto

La secuencia por defecto es: \u@\h:\w \$

  diego@usuariodebian:/etc$  

Ahora para colorearlo, necesitamos introducir los colores, usando una secuencia no imprimible. De modo que antes de cada elemento ponemos el color encerrado entre \[ y \] esto es SUPER IMPORTANTE, si no lo hacemos, se nos descajeta todo cuando borramos o usamos autocompletar.
A cada color lo anotamos con un \e[ al principio y un m al final.
entonces, cuando cambiamos el color a ROJO, ponemos

\[\e[0;31m\]


=====================================================
ATENCIÓN:
Todo lo que le siga va a estar en rojo, hasta que no le digamos que use otro color.
Para resetear el color, al color por defecto de la consola usamos el valor 0;0
=====================================================


Usuarios del sistema

En mi caso personal uso el siguiente formato, para los usuarios:

  diego@usuariodebian: /home/diego/Descargas $  

La variable PS1 es la siguiente:

PS1='${debian_chroot:+($debian_chroot)}\[\e[1;32m\]\u\[\e[1;37m\]@\[\e[1;36m\]\h: \[\e[1;37m\]\w \[\e[1;32m\]\$ '


Usuarios del sistema de otro pc de la red

En mi caso personal uso el siguiente formato, para los usuarios:

  [192.168.x.x] diego@usuariodebian2: /home/diego/Descargas $  

La variable PS1 es la siguiente:

PS1='${debian_chroot:+($debian_chroot)}\[\e[1;33m\][192.168.x.x] \[\e[1;32m\]\u\[\e[1;37m\]@\[\e[1;33m\]\h: \[\e[1;37m\]\w \[\e[1;32m\]\$ '


Usuarios administradores

y para el usuario root y grupo de administradores uso el siguiente formato:

  root@usuariodebian: /usr/lib #  

La variable PS1 es la siguiente:

PS1='\[\e[1;31m\]\u\[\e[1;37m\]@\[\e[1;36m\]\h:\[\e[0;31m\] \w \$\[\e[1;32m\] '

En las otras computadoras les cambio el color al host, por ejemplo, en ves de usar verde, uso rojo, cambio el 0;32 por 0;31

PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[0;31m\]\h\[\e[0m\] \w\$ '


Observen el uso de \[\e[0m\] para resetear el color. Si no lo ponen al final, les queda el texto de la consola en el último color que pusieron en el prompt

Con eso puedo rápidamente ubicar el prompt y sin tener que leer el nombre de host, para saber de cual se trata. Porque distingo muy fácilmente cuando la sesión es de root y cuando no.

Usuarios administradores de otro pc de la red

y para el usuario root y grupo de administradores uso el siguiente formato:

  [192.168.x.x] root@usuariodebian: /usr/lib #  

La variable PS1 es la siguiente:

PS1='\[\e[1;31m\][192.168.x.x] \[\e[1;31m\] \u\[\e[1;37m\]@\[\e[1;36m\]\h:\[\e[0;31m\] \w \$\[\e[1;32m\] '

Observen el uso de \[\e[0m\] para resetear el color. Si no lo ponen al final, les queda el texto de la consola en el último color que pusieron en el prompt

Con eso puedo rápidamente ubicar el prompt y sin tener que leer el nombre de host, para saber de cual se trata. Porque distingo muy fácilmente cuando la sesión es de root y cuando no.


Comandos coloreados en bash

En el archivo .bashrc que se encuentra en nuestra carpeta personal, tenemos que buscar la linea: # force_color_prompt=yes y le borramos el símbolo de la almohadilla del principio, quedando así:

force_color_prompt=yes

A partir de ahora la salida de todos los comandos será en color, en algunos casos tenemos que configurar el color de algunos de ellos, como se ve en la siguientes opciones

Para la salida del comando ls coloreada, descomentamos en el archivo .bashrc

 alias ls='ls --color=auto' 


También podemos descomentar las siguientes líneas para dir y vdir:

 alias dir='dir --color=auto' 

 alias vdir='vdir --color=auto' 

de modo que cuando hacemos ls, en realidad bash hace "ls --color=auto" y nos muestra todo con colores 


Colorear la salida de grep

Es super útil para encontrar lo que nos filtra grep.
Añadimos la siguiente línea tal y como e enucentra abajo:

 export GREP_COLOR="1;33" 

y descomentamos la siguiente linea:

 alias grep='grep --color=auto' 

1;33 es amarillo, así que lo que buscamos con el comando grep aparece de ese color. Si quieren otro, lo buscan en la lista de arriba y listo.


Colorear la salida de root

Para que root tenga la salida del comando ls coloreada, editamos el archivo .bashrc que se encuentra en la carpeta /root y descomentamos las siguientes dos líneas:

# export LS_OPTIONS='--color=auto'
# alias ls='ls $LS_OPTIONS'

quedando así:

export LS_OPTIONS='--color=auto'
alias ls='ls $LS_OPTIONS'



Conclusión

A mí me facilita mucho la lectura y me hace mucho mas cómodo trabajar en la consola. Los colores nos permiten encontrar la información mas rápido, ya que la vista es mas rápida que la lectura. A la vez que nos dan información por el simple hecho de poder distinguir los colores, por ejemplo: prompt rojo para   root #   y prompt verde para el   usuario $   (no tengo que leer si es $ o #, o si dice root o diego en el nombre de usuario)




Enlace a: Cambiar mensaje de bienvenida de SSH




Generador de modificaciones en Bash:



Ejemplo de creación de mi prompt en dicha página:





1- Código del prompt:

PS1='\[\e[0;97;48;5;196m\]\u\[\e[0;97m\]@\[\e[0;38;5;46m\]\H\[\e[0;38;5;255m\]:\[\e[0;97;48;5;196m\]\w \[\e[0;38;5;231;48;5;196m\]\$\[\e[0;97m\] \[\e[0m\]'


1- Previsualización de ejemplo:






2- Código del prompt:

PS1='\[\e[97;48;5;196m\] \u \[\e[30;106m\] \[\e[38;5;16m\]@\[\e[48;5;51m\]\H\[\e[30;106m\]: \[\e[38;5;231;48;5;196m\] \[\e[38;5;231;48;5;196m\]\w\[\e[97;48;5;196m\] \[\e[38;5;231;48;5;196m\]\$\[\e[97;48;5;196m\] \[\e[0m\] '


2- Previsualización de ejemplo:









No hay comentarios: