Tengo un script bash que funciona con rutas relativas. Necesita tener un directorio de trabajo que sea igual al directorio en el que está almacenado el script. Esto funciona bien siempre y cuando lo inicie desde el indicador, porque primero puedo hacer un cd al directorio del script. Sin embargo, cuando creo un enlace simbólico a la secuencia de comandos en /etc/cron.hourly, la secuencia de comandos se rompe.
Necesito una forma de hacer que el script bash cambie el directorio al directorio en el que está almacenado el script. Sin embargo, hasta ahora no he tenido éxito. ¿Hay una manera fácil de hacer esto, incluso si el script se llama desde cron a través de un enlace simbólico?
Respuesta aceptada:
Deberías poder hacer esto.
- El parámetro $0 se expande a la ruta completa (incluido el nombre) del script tal como se invocó.
- La función de shell integrada test (o [ ] ) puede probar si una ruta es un enlace simbólico usando -L
ls -l
, si se aplica a un enlace simbólico, dará una sola línea de salida con la ruta verdadera como campo final.
Eso es suficiente para que descubras la ubicación de la fuente. Por supuesto, eso podría ser un enlace simbólico, lo que requeriría que lo hicieras de forma recursiva...