¿Cómo ejecutar un script desde otra ruta y conocer la ruta del script?

8

Necesito ejecutar un script que acceda a un archivo en la misma ruta en la que se encuentra.

Por ejemplo: tengo el script /home/me/folder/script.shy este script accederá al archivo /home/me/folder/myfile. Como el archivo está en la misma ruta del script, solo uso el nombre myfile, no la ruta completa.

Pero si lo ejecuto /tmp/, como:

/tmp$ /home/me/folder/script.sh

me da:

myfile: No such file or directory

Entonces, ¿cómo puedo decir en el script que el archivo está en la misma ruta que el script en sí?

Tom Brito
fuente
¿Puedes mostrar cuál es el uso de myfile aquí?
Faheem Mitha
@ Faheem Mitha: es solo otro script que llama mi script.sh.
Tom Brito
¿Alguna razón por la que no desea utilizar el camino completo o mover ambos a su RUTA?
Faheem Mitha
1
@Faheem Mitha: Quiero poder mover esta carpeta con los scripts a otro lugar, tal vez incluso a otra computadora, sin necesidad de reescribir la ruta de myfile.
Tom Brito

Respuestas:

8

¿Qué tal $(dirname "$0")/myfile?

alex
fuente
9

No puede saberlo en todas las circunstancias, pero a menudo (no siempre) cuando ejecuta un script por ruta en lugar de permitir que el shell busque $PATH, la ruta al script estará en $0. Luego puede usar dirname "$0"o ${0%/*}para obtener el camino.

geekosaur
fuente
4

Normalmente haría algo como esto al comienzo de mi guión:

SCRIPTDIR=$(dirname "$0")

O, para obtener la ruta completa al directorio de la secuencia de comandos (en lugar de una ruta relativa):

SCRIPTDIR=$(cd $(dirname "$0") && pwd)

Luego solo haga referencia ${SCRIPTDIR}donde sea necesario.

Richard Downer
fuente