Como crear un comando de terminal (pero no un alias)

Crear comandos en Linux (en vez de alias)

Si empiezas a usar Linux es muy probable que también estés empezando a programar. Tarde o temprano vas a crear tus propias aplicaciones o scripts, y es habitual que surja la duda sobre cómo se puede crear un comando para ejecutar tus propios programas.

Habitualmente se enseña a crearlos mediante un alias, pero no, los alias NO son comandos y por lo tanto carecen de las ventajas que tienen estos últimos.

En este post podrás aprender qué son los alias, los comandos y cómo crear ambos.

Qué es un alias

Un alias consiste en darle nombre a una instrucción o conjunto de instrucciones que se puedan pasar por la terminal. Si se puede escribir en la terminal, puedes crear un alias de ello.

Por ejemplo, podemos llamar listar al comando ls, y así poder usar ambos para conseguir el mismo resultado.

Sin embargo, este ejemplo no tiene mucho sentido. Vamos a ver algo más útil.

Ejemplo de para qué usar un alias

Supongamos que necesito consultar el contenido del directorio Documents a menudo.

Una manera sería navegar desde la terminal hasta llegar al directorio. Por ejemplo, si estoy en algún proyecto dentro de Documents, puedo retroceder con cd .. tantas veces como sea necesario hasta llegar.

También podemos escribir la ruta absoluta:

cd /home/CafeConBits/Documents

O también:

cd ~/Documents

NOTA: ¿Sabías que, en Linux, el símbolo ~ es un sinónimo del directorio principal del usuario? De manera que es lo mismo escribir /home/NombreUsuario que ~.

¿Y si pudiera usar tan solo la palabra docs?

Pues ahí entran los alias. Podemos crear uno con el nombre docs y le asignamos la orden que queramos que se ejecute por la terminal, en este caso cd ~/Documents.

De esta manera hemos conseguido que siempre podamos llegar al directorio con tan solo escribir docs en la terminal. Más rápido, más sencillo, igual de eficaz.

Pero no solo eso: un alias lo que hace es darle nombre a aquello que escribirías en la terminal, y por lo tanto puede ser un conjunto de comandos que uses habitualmente.

Siguiendo el ejemplo, si escribimos en la terminal lo siguiente cd ~/Documents; ls nos desplazamos al directorio y luego se lista todo su contenido. Y si se puede escribir en la terminal, se puede definir dentro de un alias. Así que podemos hacer que con solo la palabra docs se consiga ejecutar dos acciones diferentes.

Cómo se crea un alias

Los alias son cargados por la shell cada vez que iniciamos una nueva sesión desde el terminal.

Si no sabes qué es la shell y en qué se diferencia con el terminal, te recomiendo echarle un ojo a este post:  ¿Terminal o Shell? Qué son y en qué se diferencian .

Cada vez que abrimos una terminal se inicia una nueva sesión en la shell del sistema operativo. Durante este proceso, se carga un archivo de configuración que es personalizable.

Este archivo dependerá de la shell que usemos. Si no has modificado la shell que viene por defecto, de seguro que estás usando Bash (Bourne-Again Shell), así que deberás buscar un archivo con el nombre .bashrc, que encontrarás en tu directorio personal.

~/.bashrc

NOTA: Yo uso la shell llamada Zsh, así que en mi caso el archivo se llama .zshrc. Cómo ves, siempre es el nombre de la shell y las siglas "rc", de read command, y empezando con un punto (para que sea un archivo oculto).

Este archivo carga todas las configuraciones personales del usuario para el shell, por lo tanto es donde se añaden los alias personalizados.

Para crear un alias, tan solo hay que abrir el archivo y añadir al final lo siguiente:

alias nombre_del_alias = "comando1; comando2; ...; comandoN"

Siguiendo el ejemplo anterior, para conseguir el alias que he descrito deberíamos incluir en el archivo .bashrc la siguiente linea:

alias docs = "cd ~/Documents; ls"

Una vez guardamos los cambios, necesitamos cargar el nuevo alias. Para ello, podemos abrir una nueva terminal, o si necesitamos usar la misma se puede usar el comando source seguido del archivo en cuestión.

source ~/.bashrc

Qué es un comando

Imagina que tenemos nuestro "Hello, World!" en C, con el archivo binario al que hemos nombrado salute. Cada vez que queremos usar nuestra hermosa aplicación, debemos escribir un punto y una barra delante:

./salute

Y si estamos en un directorio diferente al del archivo, necesitaremos la ruta (relativa o absoluta), por ejemplo:

/home/CafeConBits/Documents/hello_world/salute

Algo engorroso, ¿no crees?

Una solución sería crear un alias.

alias salute = "/home/CafeConBits/Projects/hello_world/salute"

Esto funcionaría, pero tan solo mientras usemos la misma shell. Si dejamos de usar Bash y pasamos a Zsh, deberemos crear el alias de nuevo.

Lo mismo sucede si usamos un usuario diferente del mismo sistema, ya que el archivo de configuración donde creamos los alias es personal para cada usuario. Y algo parecido sucede si se intenta usar desde otra aplicación que use los comandos del sistema.

¿Por qué? Pues por que un comando no es un alias.

Entonces... ¿Qué es un comando?

Un comando es un archivo ejecutable al que podemos llamar por el nombre del propio archivo, y que el sistema lo reconoce porque está almacenado en un directorio específico para comandos.

Bueno, de hecho hay varios directorios de estos... Pero vamos por partes.

Cómo crear un comando

Primero de todo, vamos a consultar una variable del sistema llamada PATH.

echo $PATH

Si ejecutas en la terminal la línea de arriba, te aparecerá un listado de directorios separados por dos puntos :.

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin

Cada uno de esos directorios almacena comandos.

Por lo tanto, si almacenamos un archivo ejecutable en cualquiera de estos directorios, podrás llamarlo por su nombre sin necesidad de añadir la ruta del archivo, ya que el sistema lo considera un comando automáticamente.

NOTA: Si empiezas a mirar el contenido de los directorios de la variable PATH, encontrarás los diferentes comandos que usas habitualmente desde tu terminal.

Siguiendo el ejemplo anterior, podríamos mover el archivo salute al directorio /usr/bin:

sudo mv salute /usr/bin

A partir de ahora, podemos usar el comando salute desde cualquier lugar.

¿Y si usamos un script en Python u otro lenguaje que no se compile? Pues para ello tenemos a nuestro gran amigo Shebang, al que tengo dedicado un post:  #! ¿Por qué hay scripts con hashtag?

Conclusiones

Tanto los comandos como los alias son dos herramientas muy útiles, y escoger una opción u otra dependerá de tus necesidades. En la mayoría de los casos ambas opciones son igual de validas.

Puedes usar un alias para ejecutar un script que está en construcción o si crees que recibirá cambios. O bien, si has creado una aplicación que pueda necesitar el sistema, mejor úsala como un comando.

En todo caso, lo importante es que ahora sabes que ambos existen, que son diferentes y que nadie puede timarte diciendo que para crear comandos debes crear un alias.

Comentarios

Entradas populares de este blog

¿Terminal o Shell? Qué son y en qué se diferencian

Café con Bits 7 ☕ Motivación: hacer un videojuego

Zoom: el algoritmo de los puntos de fuga