En Bash, hacer que el directorio del script sea el directorio de trabajo
Usar el siguiente código:
#!/bin/bash
cd $(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
Aunque en otras shells UNIX/OS X/Linux podría funcionar con:
cd $(cd -P -- "$(dirname -- "$0")" && pwd -P)
En Bash se usa ${BASH_SOURCE[0]}
en lugar de $0
para que la ruta siga siendo correcta cuando se invoque desde otro fuente (source/.
).
El guión doble (-) marca el final de las opciones del comando, de esta forma no dará error al procesar archivos que contengan guiones u otros caracteres especiales.
Si es un entorno controlado normalmente funcionará con el siguiente código más sencillo:
#!/bin/bash
cd "$(dirname "$0")"
También se propone otra opción usando Parameter Expansions:
#!/bin/bash
cd "${0%/*}"
pero parece que no funciona si se ejecuta desde el mismo directorio. Nunca lo he usado.