GNU/Linux >> Tutoriales Linux >  >> Linux

¿Hacer referencia a un archivo en el mismo directorio de un script encontrado en $ruta?

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.


Linux
  1. Cómo encontrar el archivo más antiguo en un árbol de directorios en Linux

  2. ¿Por qué The Bash Script no reconoce los alias?

  3. ¿Ejecutar el mismo script en varios servidores a través de Ssh?

  4. ¿Redirigir al mismo archivo que el archivo de origen procesado por el comando?

  5. Comprender el directorio /etc/sysconfig

¿Cuál es el propósito del archivo .bash_profile en User Home Directory en Linux?

¿Núcleo volcado, pero el archivo principal no está en el directorio actual?

¿Cómo redirigir stderr y stdout a diferentes archivos en la misma línea en el script?

¿Cómo puedo encontrar el archivo más antiguo en un árbol de directorios?

¿Por qué el directorio raíz se indica con un signo /?

El script SH en $PATH no se encuentra en Linux Alpine 3.11