Cómo especificar la ubicación actual del archivo por lotes (.command) en Mac OS X

Cómo especificar la ubicación actual del archivo por lotes (.command) en Mac OS X

Tengo un archivo por lotes (.command) en el que hago doble clic para trabajar. Tiene dependencias de archivos en la misma carpeta, pero si hago doble clic en el archivo .command, simplemente se inicia y asume que la ubicación actual es /~

¿Cómo encuentro/especifico la ubicación del archivo .command en el propio script, para poder consultar los activos relativos?

Respuesta1

Si está usando bash (es decir, el script comienza con #!/bin/bash), puede usar $BASH_SOURCE para obtener el nombre de archivo del script. A partir de ahí, puede obtener el directorio en el que se encuentra:

mydir="$(dirname "$BASH_SOURCE")"

...y luego utilícelo para buscar archivos relacionados con el script, por ejemplo cp "$mydir/fileInTheSameFolder" /tmp(y utilice siempre comillas dobles, como hice yo aquí).

Tenga en cuenta que esta puede ser una ruta relativa; por ejemplo, si el script se ejecutó desde un shell interactivo con ./scriptname.command, aparecerá simplemente como ".". Esto no debería ser un problema a menos que el CD del script esté en otro lugar, pero si necesitas la ruta completa, puedes usar esto en su lugar:

mydir="$(cd "$(dirname "$BASH_SOURCE")" && pwd)" || {
    echo "Error getting script directory" >&2
    exit 1
}

O bien, podría simplemente cdir al directorio del script al principio del mismo:

cd "$(dirname "$BASH_SOURCE")" || {
    echo "Error getting script directory" >&2
    exit 1
}

información relacionada