Obtener el directorio de ejecución de un script BASH


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)

obtener el directorio de un script

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? 😉

2 comentarios en “Obtener el directorio de ejecución de un script BASH

  1. 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 gusta

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.