Elige Tu Propio Prompt

El prompt

El prompt es la cadena de texto que le indica al usuario que puede ingresar comandos en un shell. En Linux existe la variable PS1 que guarda el valor del mismo. PS1 significa "Prompt String 1".

Por ejemplo, en Fedora tiene el valor [\u@\h \W]\$ y se expande a:

test@localhost:~$

Esta variable reemplaza automáticamente determinados caracteres escapados con una contrabarra. Algunos de ellos son:

Caracter escapado Reemplazado por
\d Fecha en formato dom abr 21
\h El nombre del host sin el dominio
\H El nombre del host completo
\t hora en formato 24 hs
\T hora en formato 12 horas
\@ hora en formato 12 horas am/pm
\u El usuario actual
\w el directorio actual
\W la ruta relativa del directorio actual

También se pueden usar secuencias de escape ANSI para colorear, por ejemplo

Prompt con colores ANSI

Esto se explica así:

  • La secuencia \[\033indica el comienzo de una secuencia ANSI
  • [1;32m\]es color verde
  • \[\033[0m\]cierra la secuencia de colores (de otra manera todo lo que tipeemos a continuación quedará también en verde

Podemos seguir personalizando el prompt a nuestro gusto y necesidad.1

También podemos echar mano a algunos de los proyectos que nos facilitan esta tarea, tal como veremos a continuación.

sexy-bash-prompt

Sino queremos hacer todo a mano podemos usar un software como sexy-bash-prompt. Todd Wolfson creó un prompt para bash que también puede usarse para status y ramas en git. Utiliza tput, un programa para configurar terminales usadas por la shell, y también para inicializar o resetear la terminal.

Instalación de sexy-bash-prompt

  • Creamos el directorio Descargas si no existe:

# [ -d ~/Descargas ] || mkdir ~/Descargas

  • Clonamos el repositorio:-

# git clone --depth 1 --config core.autocrlf=false https://github.com/twolfson/sexy-bash-prompt

  • Entramos en el directorio del repo:

# cd sexy-bash-prompt

  • Instalamos:

# make intall

  • Recargamos la configuración de la shell

# . ~/.bashrc

¡Listo!

sexy-bash-prompt

Configuración de sexy-bash-prompt

Se puede adaptar a gusto el aspecto del prompt editando el archivo ~/.bashrc y/o ~/.bash_prompt

Personalizando sexy-bash-prompt

Aquí vemos un ejemplo de configuración personalizada:

powerline

Powerline2 se trata de un software mucho más sofisticado escrito en python por Kim Silkebækken.

Originalmente este proyecto se llamaba vim-powerline el cual proporcionaba una línea de estado para vim, pero posteriormente evolucionó para ser una línea de estado para aplicaciones tales como bash y tmux entre otros.

Instalación de Powerline

En el caso de Fedora viene como paquete y se puede instalar con:

# dnf install powerline

La configuración para bash se puede realizar en el archivo .bashrc de esta manera:

if [ -f `which powerline-daemon` ]; then
  powerline-daemon -q
  POWERLINE_BASH_CONTINUATION=1
  POWERLINE_BASH_SELECT=1
  . /usr/share/powerline/bash/powerline.sh
fi

En el caso de CentOS 7, el software se puede instalar con pip y luego agregar en .bashrc:

if [ -f `which powerline-daemon` ]; then
  powerline-daemon -q
  POWERLINE_BASH_CONTINUATION=1
  POWERLINE_BASH_SELECT=1
  .  /bindings/bash/powerline.sh
fi

Y así queda luego de hacer . .bashrc:

Powerline

Configuración de Powerline

La configuración de powerline en CentOS al instalar con pip está en /usr/local/lib/python3.6/site-packages/powerline/config_files. En Fedora se encuentra en /etc/xdg/powerline. Para modificar alguno de los archivos se pueden crear el directorio ~/.config/powerline y poner las modificaciones allí.

Existen varios archivos de configuración que tienen el mismo nombre, pero ubicados en diferentes directorios, los cuales se combinan, como es habitual los archivos del usuario tienen prioridad sobre los globales.

Poniendo como ejempleo CentOS y la shell BASH, los archivos de configuración serían:

Ruta del archivo o directorio Descripción
/usr/local/lib/python3.6/site-packages/powerline/config_files/config.json Archivo principal de configuración
/usr/local/lib/python3.6/site-packages/powerline/config_files/colorschemes/default.json Configuración predeterminada del esquema de colores
/usr/local/lib/python3.6/site-packages/powerline/config_files/colorschemes/shell/default.json Configuración predeterminada del esquema de colores para la shell

Al editar el archivo local ~/.config/powerline/config.json podemos cambiar el esquema de colores predeterminado:

Esquema de colores

Para cambiar el esquema de colores:

# mkdir -p .config/powerline/colorschemes/shell # cp /usr/local/lib/python3.6/site-packages/powerline/config_files/colorschemes/shell/__main__.json .config/powerline/colorschemes/shell/

La definición de esos grupos se puede ver en /usr/local/lib/python3.6/site-packages/powerline/config_files/colorschemes/default.json

Por ejemplo superuser tiene el valor information:additional, el cuál este a su vez tiene: "fg": "gray9", "bg": "gray4", "attrs": [].

Podemos copiar el archivo correspondiente y personalizarlo:

# cp /usr/local/lib/python3.6/site-packages/powerline/config_files/colorschemes/shell/default.json .config/powerline/colorschemes/shell/

Supongamos que le hacemos la siguiente modificación:

{
        "name": "Default color scheme for shell prompts",
        "groups": {
                "hostname":         { "fg": "brightyellow", "bg": "mediumorange", "attrs": [] },
                "environment":      { "fg": "white", "bg": "darkestgreen", "attrs": [] },
                "mode":             { "fg": "darkestgreen", "bg": "brightgreen", "attrs": ["bold"] },
                "superuser":             { "fg": "brightred", "bg": "white", "attrs": ["bold"] },
                "attached_clients": { "fg": "white", "bg": "darkestgreen", "attrs": [] }
        },
        "mode_translations": {
                "vicmd": {
                        "groups": {
                                "mode": {"fg": "darkestcyan", "bg": "white", "attrs": ["bold"]}
                        }
                }
        }
}

Luego habría que cambiar el archivo principal del tema .config/powerline/colorschemes/shell/__main__.json:

{
        "groups": {
                "continuation":         "cwd",
                "continuation:current": "cwd:current_folder",
                "exit_fail":            "critical:failure",
                "exit_success":         "critical:success",
                "jobnum":               "information:priority",
                "superuser":            "mysuperuser"
        }
}

Hay cambios que no se aplican directamente, para este tipo de casos hacer lo siguiente:

# powerline-daemon --replace

Para cambiar de tema:

cp /usr/local/lib/python3.6/site-packages/powerline/config_files/themes/unicode_terminus_condensed.json .config/powerline/themes/shell/default.json

Y luego recargar el daemon.

PureLine

Otra alternativa escrita por Chris Marsh es Pureline3, que ofrece un prompt al estilo de Powerline pero escrito en bash.

PureLine

Instalación de pureline

  • Clonar el repositorio

# git clone https://github.com/chris-marsh/pureline.git

  • Entrar en el diretorio

cd pureline/

  • Usar alguno de los archivos de configuración existentes:

cp pureline/configs/powerline_full_256col.conf ~/.pureline.conf

  • Agregar la línea siguiente en ~/.bashrc:

source ~/.pureline/pureline .pureline.conf

  • Y recargar la configuración de bash:

souce ~/.bashrc

Configuración de PureLine

Editando el archivo ~/.pureline.conf se puede modificar a gusto el prompt:

Configurando PureLine

Quedaría así:

E incluso se puede cambiar el símbolo principal del prompt:

Full Custom

Nota sobre fuentes

Hay dos maneras básicamente en que un prompt muestre bien los glifos (por ejemplo flechas y otros símbolos especiales): usar la fuente PowerlineSymbols.otf (en Fedora está en el paquete powerline-fonts) como secundaria para una de las fuentes existentes o instalar una fuente parcheada4.

Conclusión

Un prompt puede resultar una herramienta que proporcione información muy útil y también para diferenciar hosts al loguearnos. De estas opciones me parece la mejor PureLine ya que está escrita en bash, la configuración es más natural y sencilla. Powerline usa de acuerdo a ps_mem unos 12 MB de memoria RAM. No obstante, de acuerdo a su propio sitio de desarrollo hay que tener en cuenta que las próximas versiones de PureLine puede cambiar el modo de configuración, por lo tanto sus archivos podrían necesitar necesitar cambios.

Comentarios

Comments powered by Disqus