Escribí tus scripts ejecutables en cualquier lenguaje

¿No te llevás bien con bash? Aprendé como escribir tus propios scripts en tu lenguaje favorito.

Escribí tus scripts ejecutables en cualquier lenguaje

Los scripts ejecutables son archivos de código que podemos ejecutar sin tener que pasar por pasos intermedios como compilarlos a otro archivo diferente.

Lo más posible es que si alguna vez buscaste cómo escribir uno te hayas encontrado algo como:

(archivo holis.sh)

#!/bin/bash

echo "Holis!"

que se ejecuta como ./holis.sh

Lo cual no está mal. Ése script está escrito en bash, lo cual es una elección muy común cuando se quiere hacer programas que puedan correr donde sea porque casi cualquier compu viene con este lenguaje instalado.

Sin embargo, eso no pesa tanto cuando estamos escribiendo un script para usar en nuestra compu, así que no es necesario limitarnos a escribir en bash. Pero, ¿cómo escribimos un script en otro lenguaje?

Veamos, paso por paso, cómo escribir un script y ejecutarlo:

1. Creando un archivo ejecutable

Antes que nada, necesitamos el archivo en el que vamos a escribir el script: lo podés crear con cualquier editor de código que te guste.

En este caso, yo creé un archivo “holis” vacío. La forma de ejecutarlo desde la terminal es escribiendo:

./holis.py

lo cual nos va a mostrar un error como éste:

bash: ./holis.py: Permission denied

Ésto es porque aún no tiene permisos de ejecución. Una manera de dar esos permisos desde la terminal es usando chmod:

chmod +x holis.py

¡Listo! Ya podemos ejecutar nuestro programa, que todavía no hace nada.

2. Entendiendo el #!

Volvamos un segundo a la primera línea del script que vimos como ejemplo:

#!/bin/bash

El par de caracteres #! se llama Shebang y el sistema operativo sabe que si el programa empieza con esos dos caracteres es un script ejecutable. Lo que sigue a #! es una ruta a un intérprete.

Un intérprete es un programa al cual le podemos pedir que ejecute código escrito en algún lenguaje. En el caso de /bin/bash es un intérprete que ejecuta código bash.

Es por eso que correr el script

./holis.sh

es lo mismo que pasarlo como parámetro al intérprete directamente

/bin/bash holis.sh

El intérprete es quien se encarga de evaluar todo el contenido del archivo con nuestro código.

Entonces, si quisiéramos escribir un script en un lenguaje diferente, solo debemos reemplazar el intérprete a usar por uno que pueda evaluar el lenguaje que queremos usar.

Por ejemplo, escribámos holis.py en Python:

#!/usr/bin/python

print("Holis!")

Si instalaste el lenguaje en tu compu, lo más probable es que tengas un intérprete del mismo, incluso con algunos lenguajes que en general se compilan como java.

Una alternativa a poner la ruta al intérprete es usar env de la siguiente manera:

#!/usr/bin/env python

print("Holis!")

Luego de /usr/bin/env podés escribir cualquier intérprete que se pueda encontrar en el PATH. Si desde la terminal podés correr python, entonces esto también va a andar.

Dato divertido: el intérprete evalúa todo el archivo incluida la línea inicial con el #!, por lo que la mayoría de los intérpretes ignoran dicha línea. De hecho, en muchos lenguajes de scripting las líneas que empiezan con # son comentarios por lo que siempre se ignoran.

3. Eso es todo, ¡Escribamos un script!

Para sintetizar un poco lo visto en este post y dejar un ejemplo con código un poco más complejo que el script “holis” vamos a escribir algo un poco más divertido:

Una bola mágica, que son esos juguetes a los que les podés hacer preguntas y te contestan alguna respuesta al azar. Por ejemplo:

Preguntá algo:
> GRRM va a terminar los libros de canción de hielo y fuego?
tengo mis dudas

Preguntá algo:
> es momento de estrellarse las cabezas unos contra otros y sacarse los sesos?
yo diría que sí

Y para ver un ejemplo de cómo pasar parámetros a los scripts, vamos a hacer que las posibles respuestas no estén en el código sino que las obtenga de un archivo que le brindemos.

Entonces, lo que queremos es algo que podamos ejecutar como:

./bolaMagica respuestasPosibles

donde respuestasPosibles sea un archivo en el que cada línea representa una respuesta.

A continuación hay posibles implementaciones de scripts que harían eso en diferentes lenguajes, con comentarios para poder seguirlos. También podés encontrarlas en este repositorio de github.

Para cerrar, si te interesa practicar lo que leíste en el post y no sabés muy bien con qué, te dejo un par de ideas:

  • Intentá implementar bola Mágica en algún otro lenguaje. Y si lo hacés, mandame un PR y lo agrego al repo :)
  • Modificá alguno de los scripts para que el script valide que la pregunta termine en “?”, y que si eso no se cumple responda algo diferente, como por ejemplo: “No me hiciste ninguna pregunta.”.