Aunque de un tiempo a esta parte suelo programar mis scripts más en Python que en BASH (por poder usarlos tanto en Windows como en Linux), necesitaba el otro día mejorar uno de los que tengo funcionando con el uso de un fichero de configuración.
Como el script lo lanzo desde cualquier directorio, no podía utilizar rutas relativas al fichero de configuración, así que me ha tocado buscar la forma de obtener la ubicación de un script en BASH.
Te cuento cómo hacerlo…
Sencillo, no te preocupes.
Guarda el siguiente fragmento de código en un fichero (p.e. /tmp/script.sh) y dale permisos de ejecución (chmod a+x /tmp/script.sh)
#!/bin/bash SCRIPT=$(readlink -f $0); dir_base=`dirname $SCRIPT`; echo "El script se encuentra en $dir_base";
Observa que lo lances desde el directorio que lo lances… siempre aparecerá el mismo directorio: el directorio en el que has guardado el script (en mi ejemplo, el directorio temporal /tmp)
La idea es sencilla:
- Aprovechamos que el parámetro $0 es la ruta del script
- Con readlink nos evitamos problemas con algún posible enlace que se haya definido al script
- El comando dirname nos permite obtener la ruta (sin el nombre del fichero) de la ruta obtenida en el paso anterior
Sencillo, ¿verdad? Pues aquí lo dejo que la próxima vez que lo necesite, seguro que no me acuerdo del «truco»
Conclusión
Forma de obtener en BASH la ruta al script que se ha lanzado. Yo lo uso para ficheros de configuración pero igual alguien nos sorprende con posibles usos en los comentarios ¿no os parece?
Como se suele decir: el único límite es tu imaginación y, por estos lares, somos creativos… ¿o no? 😉
Esto es muy útil, pues cuando haces un programa y lo ejecutas a mano controlas estos «parámetros» como son quien lo ejecuta y desde donde, pero cuando ese mismo script lo automatizas por ejemplo en un cron estas variables (quien lo ejecuta y desde donde suele cambiar) y por lo tanto es muy probable que el resultado esperado de tu programa no sea el que tú deseabas sino otro por ese motivo. Se ejecuta de manera diferente a lo que tú esperas
Yo suelo poner al principio de los programas esa ruta (en python)
def DirectorioDeTrabajo():
import os
Aux = os.getcwd()
EscribeLog(‘Directorio de trabajo ‘ + Aux)
return Aux
def EscribeLog(Comentario):
import logging
#Escribe la fecha y un comentario para saber que va haciendo el programa
logging.info(‘%s:%s’, datetime.now().strftime(«%d-%m-%Y %H:%M:%S»), Comentario)
print Comentario
return Comentario
# Creamos el fichero de log
logging.basicConfig(filename=FicheroLog, level=logging.INFO)
y así veo desde donde se ejecuta el programa.
Muchas gracias,
Julio.
Me gustaMe gusta
Al contrario, Julio: gracias a ti por enriquecer la entrada con la «traducción» a Python de la solución.
Igualmente, gracias por iniciar el «diálogo» con tu comentario 😅
Me gustaMe gusta