miércoles, 6 de diciembre de 2017

Cambiar el formato del prompt de nuestra terminal en Linux



Bienvenidos a este nuevo artículo donde os voy a mostrar como cambiar el formato o los caracteres predefinidos del prompt de nuestra terminal de comandos de Linux.
En mi caso estoy utilizando la distribución Ubuntu, pero se procede de la misma forma en las diferentes distribuciones de Linux.



Pero antes una definición rápida, ¿Que es el prompt?
El prompt es el conjunto de caracteres que se muestran en una línea de comandos y que nos indica que nuestro intérprete de comandos (Bash por defecto en prácticamente todas las distribuciones GNU/Linux) está a la espera de ordenes o entrada de comandos por nuestra parte.

Y ahora continuemos:

Como veis nuestro prompt en nuestro emulador de terminal gnome por defecto tiene este aspecto:





Las letras están en color verde y en negrita, primero nos muestra el nombre del usuario que ha iniciado la sesión, luego como separador nos muestra el símbolo @, a continuación se nos muestra el nombre de nuestro equipo, luego los dos puntos como separador también, seguidamente del símbolo de la cedilla que es una abreviación de nuestro directorio de inicio del usuario que ha iniciado la sesión, y para terminar se nos muestra el símbolo del dolar $ que nos dice que no somos usuario root o super usuario.

Bien, pues todo este formato lo podemos modificar a nuestro gusto.

El formato del prompt se guarda en la variable PS1. Y para que se nos muestre en pantalla vamos a escribir el siguiente comando:

$ echo $PS1

Hacemos un echo y se nos muestra lo siguiente:


Os muestro todas las secuencias de escape que podéis aplicar para ir modificando el prompt, aquí está el listado:

  • \a --> muestra un carácter ASCII de ring.
  • \d --> muestra la fecha actual en formato "dia_de_la_semana mes día", "dom nov 18".
  • \e --> muestra un caracter ASCII de escape.
  • \h --> muestra el nombre del equipo hasta el primer punto.
  • \H --> muestra el nombre del equipo.
  • \n --> nueva línea
  • \r --> retorno de carro. (enter).
  • \s --> muestra el nombre del shell.
  • \t --> muestra la hora actual en formato de 24 horas HH:MM:SS.
  • \T --> muestra la hora actual en formato de 12 horas HH:MM:SS.
  • \@ --> muestra la hora actual en formaro de 12 horas con am/pm.
  • \u --> muestra el usuario actual.
  • \v --> muestra la version de bash.
  • \V --> muestra el número de release de batch, versión + parche.
  • \w --> muestra el directorio de trabajo actual, la ruta path.
  • \W --> muestra el nombre del directorio actual.
  • \! --> muestra el número en el historial del comando.
  • \# --> muestra el número de comando de este comando.
  • \$ --> muestra si el usuario es root (UID=0) se indica un '#', un usuario normal '$'.
  • \\ --> muestra la barra diagonal.
  • \[ --> marca el inicio de una secuencia de caracteres no imprimibles.
  • \] --> marca el fin de la secuencia de caracteres no imprimibles.
Para empezar a modificar el prompt escribiremos en la línea de comandos la siguiente instrucción:

PS1='(((\t))) {\u##\h}\W\$> '

Y este es el resultado:


Os he escrito un formato fácil de entender, para que podáis deducir las secuencias entradas con el resultado final en el prompt.

ATENCIÓN: Destacar que habéis cambiado la variable PS1 pero temporalmente, porque si cerramos el terminal y lo volvemos a abrir, vuelve a aparecer el formato de siempre de nuestro prompt.

El formato del prompt queda guardado en un archivo oculto. Si cambiamos la variable PS1 dentro de ese archivo oculto entonces si que los cambios serán para siempre.

Este archivo oculto se llama .bashrc y se encuentra en el directorio principal del usuario, lo podéis ver listando con el comando:

$ ls -a

Ahora lo podéis abrir con el editor nano:

$ sudo nano .bashrc

Dentro de las tripas de este archivo nos vamos a esta secuencia de condicionales if else que os muestro en la siguiente imagen y ahí veréis la variable PS1 para poderla modificar para siempre. Guardaros estas lineas en un archivo de texto para poder introducirlas si queréis volver al formato de siempre.


También podemos cambiar los colores tanto a los caracteres, como al fondo con el comando tput. Y las características a cambiar son:

  • setaf [0-7] ----> cambia el color del carácter.
  • setab [0-7] ----> cambia el color de fondo.
  • bold ----> cambia a modo negritas.
  • dim ----> cambia modo de poco brillo.
  • sgr0 ----> cancela las características o atributos que se hayan indicado         previamente.
Aquí os muestro el código de los colores:
  • 0 negro
  • 1 rojo
  • 2 verde
  • 3 marrón
  • 4 azul
  • 5 morado
  • 6 cyan
  • 7 gris
Voy a mostraros un ejemplo con mas opciones pero seguro que lo entenderéis rápido:

PS1='\[$(tput setaf 1)$(tput setab 4)(\t)$(tput sgr0)\][\[$(tput bold)\u$(tput sgr0)\]-\W]\$==> '

  • PS1= A partir de aquí definimos la variable.
  • ' '       Las comillas simples encierran el valor de la variable.
  • \[       Todos los caracteres que se escriban a partir de aquí no aparecerán por pantalla.
  • $(tput setaf 1)  Con el signo del dolar y entre paréntesis se define el comando tput setaf que cambia el color de los caracteres al numero 1 que es el rojo.
  • $(tput setab 4) Con el signo del dolar y entre paréntesis se define el comando tput setab que cambia el color del fondo al numero 4 que es el azul.
  •           Se escribe el paréntesis por pantalla.
  • \t          Muestra la hora actual en formato 24 horas.
  • )           Se escribe el paréntesis por pantalla.
  • $(tput sgr0)  Termina aquí el formato de colores que hemos aplicado anteriormente.
  • \]          Final de la secuencia de caracteres no imprimibles.
  • [           El símbolo del corchete se mostrará por pantalla.
  • \[         Todos los caracteres que se escriban a partir de aquí no aparecerán por pantalla.
  • $(tput bold) Con el signo del dolar y entre paréntesis se define el comando tput bold que mostrará en negrita los caracteres a continuación.
  • \u         Mostrará el nombre del usuario actual.
  • $(tput sgr0)  Termina el formato de negrita que hemos asignado.
  • \]          Final de la secuencia de caracteres no imprimibles.
  • -            Mostrará el signo del guion por pantalla.
  • \W         Muestra el nombre del directorio actual.
  • ]            El símbolo del corchete se mostrará por pantalla.
  • \$          Muestra si el usuario es root o no.
  • ==>     Se mostrarán estos signos.
El resultado en el terminal es este:


Ahora podéis hacer las combinaciones que queráis hasta conseguir el prompt que mas os guste o que sea mas útil para vosotros.

Como se que habrá alguien que se despistará, he dejado aquí debajo la variable PS1 por defecto en Ubuntu para quien la haya perdido haciendo cambios.
Ya podéis copiarla y pegarla en vuestro archivo .bashrc:

################################################

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

################################################

A parte de todo lo que os he escrito, he encontrado una web donde podréis crear o configurar vuestro prompt mas rápidamente. La web es esta.


Podréis ir seleccionando cada elemento de la ventana 1 en el orden que queráis e ir arrastrándolo con el ratón hacia la ventana 2, ver el resultado con una previsualización en la ventana 3 y en la ventana 4 os mostrará el código generado para almacenarlo en la variable de entorno PS1 y a su vez en el archivo ".bashrc". Una maravilla si queréis generar un prompt rápidamente.

Ahora si se termina este artículo, espero me haya explicado bien y os sirva.
Saludos amigos.




No hay comentarios:

Publicar un comentario

Gracias por participar en este blog.