¿Requieres de una instalación o configuración de Linux o sus servicios?
¿Un desarrollo WEB empresarial a la medida?
¿Un curso o capacitación a la medida?
Revisa el sitio de SERVICIOS de LinuxTotal


Como cambiar el prompt del shell 

Copyright © 2005-2019 LinuxTotal.com.mx
Se concede permiso para copiar, distribuir y/o modificar este documento siempre y cuando se cite al autor y la fuente de linuxtotal.com.mx y según los términos de la GNU Free Documentation License, Versión 1.2 o cualquiera posterior publicada por la Free Software Foundation.

Autor: Sergio González D.  

Si acostumbras trabajar en la línea de comandos, muy posiblemente uses el shell bash (Bourne Again Shell, derivado del bourne shell de Unix), con un simple echo de la variable $SHELL puedes determinarlo: echo $SHELL. Si es el caso, entonces tu prompt debe de verse parecido a este:

[sergio@linuxtotal ~]$
Que indicaría al usuario (sergio) y el equipo en el que está (linuxtotal), ~ indica HOME (en este caso /home/sergio) o directorio de inicio, esta parte cambia cada vez que se ingresa a otro directorio:

[sergio@linuxtotal ~]$ cd /etc
[sergio@linuxtotal etc]$   

Algo útil, pero porque mejor no personalizarlo a nuestro gusto, asi que empezemos por partes.


Secuencias de escape para el prompt

El prompt se establece a través de la variable de entorno PS1:

[sergio@linuxtotal ~]$ echo $PS1
[\u@\h \W]\$

Se puede apreciar que se utilizan secuencias de escapes para ir construyendo el prompt, cada secuencia se indica con '\' seguido de un comando como 'u' (user) o 'h' (host), los demás caracteres como [,],@, espacio, etc. son opcionales y puedes elegirlos tu al acomodo que desees, las secuencias de escape son las siguientes:

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

Conociendo lo anterior podemos ahora tener un nuevo prompt:

[sergio@linuxtotal etc]$ PS1='(\t)[\u-\W]\$> '
(19:26:02)[sergon-etc]$>

Solo se indica el cambio a PS1, con PS1=' ', entre las comillas simples va la nueva secuencia que se desea, asi que personaliza el tuyo.

Añade color a tu prompt

El shell esta lleno comandos muy poco usados, uno de estos es tput, que permite cambiar las características o capacidades disponibles para la terminal, disponibles a través de la base de datos llamada terminfo. Entre las características (hay bastantes) que podemos modificar de una terminal están el color de fondo y de frente (background y foreground) del texto a través de las siguientes opciones:

  • setaf [0-7] cambia el color de frente
  • setab [0-7] cambia el color de fondo
  • bold modo negritas
  • dim modo de poco brillo
  • sgr0 apaga las características o atributos que se hayan indicado previamente

En cuanto a los códigos de color son los siguientes

  • 0 negro
  • 1 rojo
  • 2 verde
  • 3 cafe
  • 4 azul
  • 5 morado
  • 6 cyan
  • 7 gris

Puedes probar en una terminal escribiendo lo siguiente: tput setaf 1 y el texto se cambiará a rojo y puedes añadir por ejemplo un fondo verde tput setb 2 y te dará un fondo verde para el text. Asi que digamos, en base al prompt anterior, que se desea la hora en rojo y negritas, esto lo haría:

(20:05:52)[sergon-~]$> PS1='\[$(tput setaf 1)(\t)$(tput sgr0)\][\u-\W]\$> '
[sergon-~]$>   

mmmm, un poco complicado, veamos por partes:

  • \[ inicio de secuencia de caracteres no imprimibles
  • $(tput setaf 1) cambia a color rojo el texto, $(comando) expande el resultado de un comando que se ejecuta
  • (\t) lo que se ve visible en pantalla (20:06:43)
  • $(tput sgr0) apagamos los atributos, si no lo hacemos todo quedará en rojo
  • \] termina la secuencia de caracters no imprimibles
  • No es tan complicado una vez que entendimos lo que sucede. Y es posible agregar más características en un sola invocación de $(), $(tput bold; tput setaf 1).

    Ahora bien, una vez cambiado tu prompt, este no permanecerá así, si cierras la sesión o la terminal y vuelves a ingresar, notarás que sigues con tu mismo y aburrido prompt de siempre, el cambio a la variable PS1 hay que agregarlo a tu archivo de inicialización de tu sesión, generalmente '.bashrc' o '.bash_profile', incluso podrías poner los colores en variables, para facilitar el uso de la definición de PS1:

    # se añade lo siguiente a .bashrc
    # colores del texto
    rojo=$(tput setaf 1)
    verde=$(tput setaf 2)
    # colores de fondo
    azulF=$(tput setab 4)
    grisF=$(tput setab 7)
    # sin color
    sc=$(tput sgr0)
    PS1='\[$rojo(\t)$sc\][\u-\W]\$> '
    

    Pues ahí lo tienes, ahora cambia tu prompt a algo que te agrade más a ti y te sea más útil.



    ¿Requieres de una instalación o configuración de Linux o sus servicios?
    ¿Un desarrollo WEB empresarial a la medida?
    ¿Un curso o capacitación a la medida?
    Revisa el sitio de SERVICIOS de LinuxTotal

    LinuxTotal en:

    Si encuentras útil la información que proveé LinuxTotal, considera realizar un donativo que estimule a seguir proporcionando contenido de calidad y utilidad. Gracias.


    Dona a través de paypal::


    O a través de bitcoins:


    14TNQv5wM3xkSv65gHGQ6s6f8yTZuFTohE
    Más artículos de LinuxTotal

    Cuando tu creas un documento de texto en MSDOS/Windows (como por ejemplo en notepad.exe), Windows añade al final de cada línea u....


    El siguiente script te presenta la manera de colocar un reloj (hora y fecha) en la parte superior derecha de una terminal de texto....


    Este es un pequeño y útil tip que te permitirá crear PDF's a partir de páginas del manual. Cuando deseas ver la ayuda de un co....


    Entre los administradores de sistemas Linux es común el término 'one liners', algo asi como 'los de una línea', y se refiere a ....


    En este archivo de configuración se indica el modo en que los mensajes del sistema son bitacorizados a través de la utileria sys....


    Aqui, traté de enviar un archivo ejecutable (notepad.exe) a través de gmail, y sus mecanismos de seguridad me lo impidieron. Gma....


    Hay ocasiones que los usuarios insisten en poner contraseñas muy débiles de 5 o 6 caracteres a lo más. Y el argumento que dan e....


    Muchos validadores de direcciones de correo electrónico devolverán errores cuando se enfrenten con una inusual pero válida dire....


    He actualizado con varios nuevos comandos la popular guía de LinuxTotal.com.mx, asi como he añadido enlaces en los comandos en l....


    Ya son varios los lectores que me preguntan que CMS (content management system) utilizo para este sitio. Ejemplos de CMS son mambo....



    Copyright © LinuxTotal.com.mx 2006-2019
    info@linuxtotal.com.mx · linuxtotal.com.mx@gmail.com