sábado, 18 de enero de 2014

¿Como cambio los colores del prompt en la Terminal?


¡Argentinos!

No hay dudas para nadie que la consola es una excelente plataforma para imponer la Justicia Social en la Argentina, tanto como para manejar un sistema GNU con Linux.

Incluso quien la domine poco podrá comprender que el poderío y la ductilidad de su accionar nos permite hacernos rápidamente del control total del entorno para hacer cualqueir cosa, incluso remotamente. Sabemos ya que a través de SSH incluso podremos estar en la China y manejar nuestro sistema en la Argentina, de forma segura y cifrada.

Ahora bien, el programa intérprete para la Consola de Línea de Comandos normalmente es el conocido Bash, que viene por defecto en Ubuntu y muchas otras distribuciones GNU con Linux. Existen otros de mayor poderío, pero la popularidad de Bash radica en estar en casi todos los sistemas lo utilizan y por lo tanto es altamente peronista y compatible.

Una de sus características poco conocidas es la de usar color, condición que suele estár desactivada por defecto en aras de la compatibilidad con equipos antiguos con monitores monocromáticos, o impresión de agujas.

El Justicialismo no es un movimiento gregario, pero tampoco uno apegado a los viejos tiempos. Se ha actualizado doctrinalmente para la toma del poder, y bien que lo ha hecho, si no, hubiésemos perecido y sido sólo una página en la historia.

Hoy en día, la mayoría de quienes emplean una Terminal de intérprete de líneas de comandos, lo hacen visualizando los resultados en un monitor a color. Por ello, podríamos querer activar esta funcionalidad de mostrar colores.

¿Su ventaja? Podremos ver colores también en el prompt, esto es, en el receptor de órdenes de comandos. Se preguntarán para qué quisiera tal cosa, y la respuesta es simple.

Desde el punto de vista práctico, podremos identificar rápidamente cual es el host de nuestro usuario, o podremos identificar el prompt y las órdenes rápidamente entre todas las devoluciones que nos haga la terminal. Imaginemos una serie larga de trabajo con nuestra Terminal, en el cual instalemos mucha paquetería o compilemos y procesemos datos en amplitud; normalmente ello significa que los prompts de órdenes quedarán mezclados entre toda la información devuelta, y sea tedioso buscarlos dentro de todo el texto. Al contar con color, será mucho más fácil identificar "la aguja en el pajar" y encontrar las órdenes que hayamos tipeado nosotros... Por otro lado, el resultado es más vistoso, y en gustos no hay nada escrito.

Activar un prompt de color es muy sencillo, simplemente hay que modificar el archivo de configuración del intérprete de comandos de nuestro usuario. Normlamente se trata del archivo .bashrc

Para ello edito el archivo con

nano ~/.bashrc

Esto abrirá el editor GNU Nano, y nos presentará el archivo de configuración en cuestión. Utilizo la combinación Buscar (Ctrl+W) para buscar el siguiente texto:

#force_color_prompt=yes

y le borro el "#" para descomentarlo y activar la funcionalidad, de manera que quede:

force_color_prompt=yes

Guardo la modificación en el archivo (Ctrl+O). Si abro una terminal nueva (con Ctrl+Alt+T) la misma ya debería presentar un prompt a color.

El prompt debería ser verde claro, definido por el color 1,32). Afortunadamente, todos los controles del prompt son programables, incluso su color. Los mismos han de programarse en el archivo .bashrc, con un código que representa los 16 colores ANSI estandarizados. Esto no quita que algunos emuladores de terminal permitan cambiar directamente el color emulado, pero los valores tabulados "reales" son los siguientes:

Color por defecto (normalmente el blanco)0,00
Negro 0;30
Gris Oscuro 1;30
Azul 0;34
Celeste 1;34
Verde oscuro 0;32
Verde claro 1;32
Cián 0;36
Verde agua 1;36
Rojo 0;31
Rojo claro 1;31
Violeta 0;35
Lila 1;35
Marrón 0;33
Amarillo 1;33
Gris Claro 0;37
Blanco 1;37

En mi caso, he decidido modificar el color del prompt para que el color del usuario aparezca en verde y el del host en amarillo (pues uso mucho trabajar en equipos remotos, y me facilita identificar en cual sesión estoy logueado).

Para lograr lo antedicho, debo editar nuevamente el archivo .bashrc. Uso el comando "Buscar" (Ctrl+W) para dar con la siguiente línea original en el archivo:

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '


Esta línea, en particular la cadena PS1 describe la forma del Prompt, y le asigna colores por defecto.

En mi caso, altero su contenido de la siguiente manera (en el cual, naturalmente, las aclaraciones en color simplemente son informativas para que se aprecie el código del color que he escogido en cada momento):

    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u\[\033[01;34m\]@\[\033[01;33m\]\h\[\033[00;33m\]:\[\033[01;34m\]\w\[\033[00m\]$ '

Luego guardo el fichero de configuración con Ctrl+O. Una vez iniciada la terminal el prompt quedará de la siguiente manera:

usuario@equipo:~$

El tratamiento del Prompt permite una total personalización del mismo. Por ejemplo, podríamos probar con uno que nos ilustra de forma fija la ruta y la hora en la parte superior de la pantalla, si usamos este comando.

PS1='\e[1A\e[s\e[H\e[33;41;1m\e[K\w\e[200C\e[8D\e[37;41;1m [\A]\e[3m\e[u\n\[\033[36m\][\u]\[\033[33m\] \$\[\033[0m\] '

Naturalmente, si lo incluimos en la línea correspondiente de la variable PS1 del archivo .bashrc, este cambio será aplicado siempre que iniciemos una terminal.

19 comentarios:

  1. Excelente informe General !
    Quisiera hacerle una consulta, si quiero cambiar el color asignado a carpetas,archivos y demás (luego de hacer un ls -l).
    ¿cómo debería proceder?

    Muchas Gracias !

    ResponderEliminar
    Respuestas
    1. Estimado Anónimo:

      La respuesta depende del emulador de termnal que utilices. Algunos no tienen asignación de colores alguna. Sin embargo, Gnome Term los tiene:

      Simplemente has de modificar las Preferencias de Perfil (en el menú Editar). Dentro de la Solapa "Colores" podrás modificar la Paleta (que tiene ya colores asignados por defecto siguiendo la modalidad "EGA", esto es, 16 colores (tonos claros y oscuros de negro, rojo, verde, amarillo, azul, magenta, cián y blanco).

      atte.

      Juan Perón

      Eliminar
    2. Muchas Gracias
      Estoy utilizando la terminl Konsole (bien peronista) y con pasos similares a los descriptos pude lograr mi cometido

      Eliminar
    3. Estimado Anónimo:

      Y lo ha hecho gracias al Justicialismo.

      Atte.

      Juan Perón
      Conductor.

      Eliminar
  2. Hola, un pequeñísimo aporte, al final de la linea modificada "PS1=.......\]$ ' ", añadan un \ antes del signo de dolar, así:
    "PS1=.......\]\$ ' ", esto es útil para algunos ya que si cambian con sudo -s por ejemplo verán root@host:~# cosa que ayuda a identificar nuestros privilegios caso contrario verán root@host:~$ lo cual puede confundirnos y llevarnos a cometer algunas equivocaciones, saludos.

    ResponderEliminar
    Respuestas
    1. Estimado Brayan Sneider Vargas Lozada:

      Gracias por su valioso aporte, le hacemos llegar un saludo muy afectuoso.

      Atte.

      Juan Perón

      Eliminar
  3. Querido pocho, yo uso lubuntu y tiene lxterminal. Pude cambiar el color del prompt pero cuando ingreso como root de nuevo queda blanco. ¿Por casualidad sabes que línea de la hojita de texto esa tengo que modificar para cambiar el color en este caso?
    Muchas gracias y un gran abrazo.

    ResponderEliminar
    Respuestas
    1. Estimado Nicolás Fernandez

      En dicho caso, habrá de hacer como explicó Brayan Sneider Vargas Lozada en el comentario anterior, o bien crear un archivo .bashrc para tu usuario administrador root.

      Atte.

      Juan Perón

      Eliminar
    2. Estimado General, he aqui la respuesta al inconveniente de Nicolás.

      Saludos peronistas!!

      Activar color en la terminal de root en Debian


      Editar el archivo “/root/.basrh” descomentando las siguientes líneas:

      export LS_OPTIONS='--color=auto'
      eval "`dircolors`"
      alias ls='ls $LS_OPTIONS'
      alias ll='ls $LS_OPTIONS -l'
      alias l='ls $LS_OPTIONS -lA'

      Fuente:
      https://elhombrequereventodeinformacion.wordpress.com/2011/08/30/activar-color-en-la-terminal-de-root-en-debian/

      Nota: General siéntase en absoluta confianza de eliminar la fuente si usted lo cree necesario.

      Eliminar
  4. Holis, mi general.

    Normalmente hago “ps -A | grep pd” para ver los procesos que tienen “pd” en su nombre y su pid. Para no escribir todo eso, creé un archivo en /sbin/gre que contiene:
    #!/bin/bash
    ps -A | grep $1
    y le dí los permisos necesarios para ejecutarlo.

    Entonces, hago “gre pd” y me muestra en pantalla lo que quiero. Ahora… Cuando lo hacía de la forma común, las letras “pd” aparecían resaltadas en rojo. Ahora hago “gre pd” y “pd” no se resalta. ¿Por qué y cómo solucionarlo?

    Creo que puede tener que ver con que puse la consola para que me muestre los colores (como dice este post)… entonces, posiblemente, ¿el archivo bash debería ser configurado para que muestre colores? ¿De qué forma?

    ¡Gracias!

    ResponderEliminar
    Respuestas
    1. Estimado Mario:

      El que pondera los colores es el shell de comandos, no el script simple que has realizado.
      En tu caso, deberías querer incorporar el comando "gre" que se te ha ocurrido dentro del fichero .bashrc en su sección de "alias". Estos te permiten acomodar varias configuraciones.

      Verás que existen varios, por ejemplo:

      alias ll='ls -alF'

      Por lo tanto, si escribes ll será lo mismo que poner ls -alF y te mostrará los resultados en bytes de los nombres de archivo sin redondear en kilobytes (por ejemplo).

      En tu caso querrías utilizar:

      alias gre='ps -A | grep pd'

      Atte.
      Juan Perón

      Eliminar
  5. Hola, estoy usando Gentoo, 01 los pone en negrita, si quieren prueben con 02, los deja sin negrita. Al menos yo lo veo asi.

    Muchas gracias chori.

    ResponderEliminar
    Respuestas
    1. Estimado Norberto: Su aporte es valioso para la Libertad y el Justicialismo. No obstante, el resultado depende también - a decir verdad - del tipo de terminal que empleemos. En las más modernas utiliza la función negrita, en otras mas antiguas hacer eso dispone de un set de colores distintos. Asimismo, en terminales dotadas de paletas de 256 colores el resultado puede ser diferente.

      Atte

      Juan Perón

      Eliminar
  6. Si cree un usuario para que pueda ingresar al servidor, pero ese usuario no puede ver el color de las carpetas. Como puedo configurarlo?

    ResponderEliminar
  7. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  8. PS1='${debian_chroot:+($debian_chroot)}\ [\033[01;32m\]\u\ [\033[01;34m\]@\ [\033[01;33m\]\h\ [\033[00;33m\]:\ [\033[01;34m\]\w\ [\033[00m\]$ '

    Es un bonito modo para la consola

    ResponderEliminar
    Respuestas
    1. Estimado Wilson:

      Dicho encuadre presenta caracteres erroneos, que nos son ASCII. Prefiera ellos para la terminal.

      Puede probar estos:

      # Prompt original todo verde.
      #PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[
      01;34m\]\w\[\033[00m\]\$ '

      # Prompt pintón con corchetes rojos [usuario@host:~] $
      #PS1='${debian_chroot:+($debian_chroot)}\033[01;31m[\[\033[01;32m\]\u\[\033[01;3
      4m\]@\[\033[01;33m\]\h\[\033[00;33m\]:\[\033[01;34m\]\w\[\033[01;31m\]]\[\033[00
      m\]$ '

      # Prompt pintón sin corchetes usuario@host:~ $
      #PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u\[\033[01;34m\]@\[\033[
      01;33m\]\h\[\033[00;33m\]:\[\033[01;34m\]\w\[\033[00m\]$ '


      Atte.

      Juan Perón

      Eliminar