Tengo un archivo de secuencia de comandos bash, que se coloca en algún directorio agregado a $PATH para que pueda llamar a la secuencia de comandos desde cualquier directorio.
Hay otro archivo de texto en el mismo directorio que el script. Me pregunto cómo referirme al archivo de texto en el script.
Por ejemplo, si el script solo genera el contenido del archivo de texto, cat textfile
no funcionará, ya que al llamar al script desde un directorio diferente, no se encuentra el archivo de texto.
Respuesta aceptada:
Estos deberían funcionar igual, siempre que no haya enlaces simbólicos (en la expansión de la ruta o en el script mismo):
-
MYDIR="$(dirname "$(realpath "$0")")"
-
MYDIR="$(dirname "$(which "$0")")"
-
Una versión de dos pasos de cualquiera de los anteriores:
MYSELF="$(realpath "$0")"
MYDIR="${MYSELF%/*}"
Si hay un enlace simbólico en el camino a su secuencia de comandos, entonces which
proporcionará una respuesta sin incluir la resolución de ese enlace. Si realpath
no está instalado de forma predeterminada en su sistema, puede encontrarlo aquí.
[EDITAR]: Como parece que realpath
no tiene ninguna ventaja sobre readlink -f
sugerido por Caleb, probablemente sea mejor usar el último. Mis pruebas de tiempo indican que en realidad es más rápido.