lunes, 25 de noviembre de 2019

Cargar un script desde otro script en BASH

                               (P) Hugo Napoli, 2019                              



Imagen: https://github.com/odb/official-bash-logo




¿Es posible cargar un script desde otro script, en el lenguaje de programación BASH?

Pensando en el resto de los lenguajes para hacer programas, esto no solamente es posible, sino que es una técnica muy comúnmente utilizada.

BASH, presenta varios caminos (o técnicas) para dicho cometido, siendo de las más usuales, las que siguen.



I) bash "$0"


Acción: carga el mismo archivo que ya está siendo ejecutado.

Se utiliza -por ejemplo- cuando un script llegó a su fin, y se quiere preguntar si se desea comenzar otra vez. Obsérvese que en el siguiente programa, la instrucción ' bash "$0" ' es utilizada 2 veces, por 2 razones diferentes.

#!/bin/bash
clear
read -p "Ingresa el primer número a sumar: " num1
read -p "Ingresa el segundo número a sumar: " num2
resultado=$((num1+num2))
echo "El resultado es:" $resultado
echo ""
read  -p "¿Quieres hacer más sumas (sí/no)?" otra_vez
if [[ $otra_vez == "no" ]];then
     echo "Gracias por utilizar este programa. Ten un buen día :)"
     sleep 5
     exit
elif [[ $otra_vez == "sí" ]];then
     bash "$0"
else
     echo "No comprendí lo que escribiste. La próxima vez, escribe 'no' para terminar."
     sleep 5
     bash "$0"
fi 

Este es un método altamente efectivo y confiable.


II) bash "Otro script.sh"


Acción: carga el script llamado "Otro script.sh", el cual se encuentra en el mismo directorio que el programa que contiene esta instrucción.

Si el script que estamos creando está en la misma carpeta que los demás scripts que queremos cargar, solo basta con poner una línea de este tipo para lograr el objetivo.

Dependiendo de la terminal en donde estemos ejecutando los scripts y del sistema que esté siendo utilizado (variantes de Linux, MACOS, etc.), esto podría no funcionar, y devolver errores como "No se encontró el archivo", o "No existe el archivo 'Otro script.sh' ".
Puede funcionar en un ordenador, y en otro, no (aunque ambos sean capaces de interpretar código BASH).


III) bash "CAMINO Y NOMBRE DEL SCRIPT"


Este es un método parecido al anterior, salvo que si el script que queremos cargar no está en el mismo directorio que nuestro script, debemos indicárselo a BASH:

bash "/home/estudiante/Documentos/programas/menú.sh"

Esta línea, cargará el script llamado "menú.sh", el cual se encuentra dentro de la carpeta "programas", en el directorio "Documentos" del usuario "estudiante".

Este también es un método altamente efectivo y confiable, salvo para cuando se mueven archivos de su lugar original. En este caso, hay que cambiar obligatoriamente "/home/estudiante/Documentos/programas/" por lo que corresponda.


IV) Utilizando el comando "dirname"


"$0" es la forma de BASH de identificar inequívocamente al script en ejecución.

Si con "$0" ejecuta a dicho script sin margen de error, es lógico pensar en que podríamos utilizar "$0" en otro procedimiento... ¿no es así?

¿Qué tal si guardamos en una variable el "camino" de nuestro script, para poder reutilizarlo cada vez que sea necesario?

¡Hagámoslo y probemos!

camino=$(dirname "$0")

Ahora, solo basta con escribir siempre "$camino" y a continuación, adjuntar el nombre del archivo que queremos cargar, separando ambos elementos (la variable y el nombre del script) por una barra de dividir:

bash "$camino/Mi archivo.sh"

Este es otro método altamente efectivo y confiable más, que funciona aunque el script sea movido de su lugar o copiado en otro ordenador.


2 comentarios: