Guía básica para la personalización de la shell de Linux y Mac

25/09/2018
Artículo original

El intérprete de comandos más popular en Linux es Bash (acrónimo de Bourne-again shell), pero no sólo está presente en el sistema del pingüino, sino que también es la shell por defecto en macOS y se puede instalar en Windows 10, aprovechando la funcionalidad del Subsistema Linux. Su utilidad principal es que nos permite acceder a los servicios del sistema mediante comandos, pero nos pueden pasar inadvertidas las funcionalidades extra que facilitan su uso. En particular, una de sus funciones más interesantes es que Bash siempre carga una serie de archivos en el momento de su ejecución, siendo uno de ellos el archivo .bashrc. Vamos a aprender a incluir nuestras personalizaciones en ese archivo, para que se apliquen al lanzar una nueva terminal.

Ejecución de comandos al inicio

Es posible que el archivo .bashrc ya exista en la carpeta personal de nuestro usuario, y en caso contrario lo podemos crear. El intérprete no realiza ningún procesamiento especial del archivo, simplemente lo ejecuta al arranque como cualquier otro guion. Por esto, podemos usar los comandos que queramos y se ejecutarán cada vez que abramos una terminal de Bash.

Por ejemplo, podemos incluir la siguiente orden para que la shell nos dé la bienvenida, con el resultado que ves en la imagen:

echo "¡Hola de nuevo $(whoami)!"

El terminal muestra nuestro nombre de usuario en un saludo

Otras opciones más útiles podrían ser mostrar la fecha y hora o alguna información del sistema, como el uptime (tiempo que lleva encendido ininterrumpidamente). Otra opción menos útil puede ser obtener una frase de tipo fortune (frases y citas ingeniosas).

Personalización del prompt

El prompt es la línea de la terminal que generalmente muestra nuestro usuario, el directorio en que nos encontramos y acepta un comando. En Bash, este prompt viene definido en una variable de entorno, PS1, y es posible modificarlo a nuestro antojo, gracias a unos cuantos caracteres especiales que nos permiten incluir información del estado de la terminal. Por ejemplo, incluyendo en nuestro .bashrc la siguiente línea resultaría en el prompt que se muestra en la figura:

export PS1="\u en \H:\w a las \A\n> "

Prompt personalizado con la máquina, la ruta y la hora

Algunas de los caracteres interesantes que puedes utilizar son:

  • \d: la fecha
  • \A: la hora en formato 24 horas.
  • \H: el nombre de la máquina (hostname)
  • \u: el usuario actual
  • \w: la ruta del directorio actual (\W muestra sólo el nombre del directorio)
  • \$?: el código de salida del último comando (generalmente 0 indica éxito, y distinto de 0 representa un error)
  • \$(comando): inserta la salida del comando indicado

Además, se pueden personalizar los colores de fuente y fondo de cualquier fragmento del prompt mediante secuencias de escape que se componen de \e[ y el código apropiado terminado en m. El siguiente sería un posible ejemplo:

export PS1="\e[30;46m\u\e[m \e[2men\e[m \H\e[2m:\e[m\w \e[2ma las\e[m \A \e[2m(desde \$(uptime -s | cut -d' ' -f2))\e[m\n> "

Cambiado el color del nombre de usuario

Si quieres ahorrarte aprender a manejar las secuencias de escape y personalizarlo a tu gusto de forma sencilla, siempre puedes utilizar un generador como .bashrc generator que te proporcione la cadena adecuada.

Definición de alias

Los alias son una de las funcionalidades más cómodas de Bash. Se trata de comandos que podemos construir para que se expandan a órdenes más complejas. Por ejemplo, es muy común el uso del programa ls con las opciones -Ahl, en cuyo caso podríamos definir un alias:

alias ll='ls -Ahl'

Incluyendo esa simple línea en el .bashrc podremos recurrir siempre que queramos a ll para obtener un listado detallado de los archivos, sin necesidad de recordar las opciones cada vez. Es importante entender que los alias difieren de las funciones en que no reciben parámetros, sino que simplemente se expanden, con lo que ejecutar ll -t es totalmente equivalente a ls -Ahl -t. Además, si sustituimos algún comando por un alias, por ejemplo alias df='df -h', es posible llamar al comando original utilizando la barra invertida, en este caso \df.

A continuación, te incluyo una lista de alias que pueden resultarte útiles, y te animo a que definas los tuyos propios:

# Navegación
alias ..='cd ..'
alias sl='ls'
alias ll='ls -Ahl'
alias mv='mv -v'
alias rm='rm -vi'
alias cp='cp -v'
alias usage='du -sh'

# Control de cambios Git
alias gs='git status'
alias gcm='git commit -m'
alias gp='git push'

# Utilidades
alias psa='ps aux'
alias now='date +"%T"'
alias update='sudo apt update && sudo apt upgrade'
alias sudo='sudo ' # permite expansión de alias tras sudo
alias genpassword="openssl rand -base64 20"

Establecimiento del $PATH

Por último, otra variable muy importante aparte de $PS1 es $PATH. Esta contiene los directorios en los que se pueden buscar los programas que invocamos desde la terminal.

Por ejemplo, si quiero ejecutar /usr/bin/git y el directorio /usr/bin está incluido en $PATH, podré simplemente escribir git y la terminal encontrará el programa. Sin embargo, si escribo un programa o guion (script) y lo guardo en un directorio que no pertenece al $PATH, no podré ejecutarlo a menos que escriba la ruta completa hacia el mismo.

Para modificar esta variable, añade la siguiente línea a tu .bashrc, donde debes concatenar los directorios separados por dos puntos : y concatenar $PATH de nuevo al final:

export PATH="~/.local/bin:~/proyecto/bin:$PATH"

Si estás empezando con la terminal te animo a que utilices estas herramientas para acomodarte y empezar a aprovechar su potencial. Si ya tienes experiencia, no dudes en comentarnos qué alias y modificaciones usas habitualmente para hacerte la vida más fácil.

Fuentes y más información: