Obtenga el camino absoluto de un guión en Bash

Obtenga el camino absoluto de un guión en Bash
Una ruta es una ubicación para un directorio o un archivo. Hay dos tipos distintos de rutas en Linux: absoluto y relativo. La ruta relativa se determina utilizando el directorio de trabajo actual. Por otro lado, la ruta absoluta es la ruta completa a un archivo o directorio. La ruta completa, en particular, se especifica desde el directorio raíz. Una manera fácil de recordar cuál es mediante el uso de /. Una ruta relativa no comienza con A / (la carpeta raíz). En este tutorial, aprenderemos cómo obtener el camino absoluto de un guión en Bash.

Camino absoluto

Para empezar, creemos un directorio simple, subdirectorios y archivos.

En este ejemplo, si LinuxHint es nuestro directorio de trabajo actual, entonces la ruta absoluta del script de archivo.SH es:

/Home/Kalyani/Desktop/Linuxhint/Project2/Script.mierda

Nuestro camino relativo es:

Project2/script.mierda

Lo que puede notar aquí es que para recuperar el archivo llamado script.SH, si tenemos un camino absoluto, podemos recuperarlo desde cualquier lugar del ecosistema de Linux. Nuestro camino relativo no es tan flexible; Por otro lado, depende del directorio de trabajo actual. En el caso anterior, si estábamos en el directorio de Linuxhint, y era nuestro directorio de trabajo actual, entonces acceder al script.SH, tendríamos que escribir Project2/script.mierda. Observe cómo no hay / al comienzo del camino relativo.

Nuestro objetivo es recuperar la dirección o ruta completa del script (ruta absoluta).SH dio un camino relativo.

Readlink

Un comando que puede usar para capturar la dirección completa de un archivo o un ejecutable es readlink. Readlink se usa típicamente para capturar la ruta de un enlace simbólico o un archivo canónico. Sin embargo, Readlink también puede calcular la ruta absoluta dada una ruta relativa. En todos los casos, deberá adjuntar una bandera a readlink. La bandera más utilizada en tales casos es la bandera F.

Ejemplo #1 - Readlink usando la bandera F

guion.mierda
#!/bin/bash
Path = 'readlink -f “$ bash_source: -$ 0”'
Dir_path = 'dirname $ ruta'
echo 'La ruta absoluta es' $ ruta
eco '---------------------------------------------'
echo 'La ruta del directorio es' $ dir_path

Por lo general, $ 0 se usa para obtener la ruta del script; Sin embargo, esto no siempre funciona. Por lo tanto, una forma más confiable o robusta de obtener la ruta relativa del script es usando $ Bash_source:-$ 0.

Supongamos para una instancia que escribo echo $ bash_source:-$ 0, el resultado que obtengo es ./guion.mierda. Esta es la ruta no absoluta a nuestro archivo de script actual. Es decir, la ubicación del script que se ejecuta se almacena en $ Bash_source:-$ 0.

Una vez que tomamos de manera confiable el camino del script, podemos pasarlo a readlink con la bandera F. Posteriormente podemos usar el comando DirName para obtener la ruta del directorio. El comando DirName omitirá el último valor de la ruta y devolverá el resto.

Entonces, si tenemos una ruta de/home/kalyani/escritorio/linuxhint/proyecto2/script.SH, y aplicamos Dirname a él, obtendremos/Home/Kalyani/Desktop/Linuxhint/Project2. Esto tiró el nombre de base o el nombre del script de la dirección o ruta.

Realpath

Otro comando que se puede usar es RealPath. RealPath es un comando Linux utilizado para imprimir el nombre de archivo absoluto resuelto. Requiere que todos los componentes existan excepto el último componente.

guion.mierda
#!/bin/bash
ruta = $ (RealPath "$ Bash_source:-$ 0")
echo 'La ruta absoluta es' $ ruta
eco '-----------------------------------'
Dir_path = $ (dirname $ ruta)
echo 'La ruta del directorio es' $ dpath

Aquí, una vez más, obtenemos la ruta del script usando $ Bash_source:-$ 0. RealPath obtendrá el camino completo para ti, y Dirname obtendrá todo menos el último valor del camino absoluto.

Alternativa #1

Ahora suponga que no tenía el privilegio de usar RealPath o Readlink. No viene con todos los sistemas de Linux! Tuve la suerte de haber estado usando Ubuntu y, por lo tanto, podría acceder a él. Sin embargo, una larga forma de hacer lo mismo es la siguiente:

guion.mierda
#!/bin/bash
Dir_path = $ (cd $ (dirname "$ bash_source:-$ 0") && pwd)
ruta = $ dir_path/$ (Basename "$ Bash_source:-$ 0")
echo 'La ruta absoluta es' $ ruta
eco '----------------------------------'
echo 'La ruta del directorio es' $ dir_path

En este caso, primero, necesitamos la ruta del script actual, y desde ella, usamos DirName para obtener la ruta del directorio del archivo de script. Una vez que tenemos eso, cd en la carpeta e imprimimos el directorio de trabajo. Para obtener la ruta completa o absoluta, adjuntamos el nombre de base del archivo de script a la ruta del directorio o $ dir_path.

Recuperando el camino de otro script (que no sea uno mismo)

En los ejemplos anteriores, recuperamos las rutas absolutas y de directorio del archivo de script en sí. ¿Qué pasaría si quisiéramos recuperar las rutas absolutas y de directorio de un archivo que no sea el script en el que estamos trabajando (que no sea Self)??

Así que aquí, hemos creado un nuevo archivo llamado script2.sh, y nos gustaría obtener las rutas absolutas y de directorio de script2.mierda.

En guión.SH:

guion.mierda
#!/bin/bash
ruta = $ (RealPath script2.mierda
echo 'La ruta absoluta es' $ ruta
eco '-----------------------------------'
Dir_path = $ (dirname $ ruta)
echo 'La ruta del directorio es' $ dpath

Cualquiera de los métodos anteriores también debería funcionar aquí. Sin embargo, aquí, usaremos la ruta relativa de script2.sh para recuperar el camino absoluto.

Recuperando el camino de un comando

Ahora, puede obtener las rutas Absolute y del Directorio de cualquier scripts que desee y el de los comandos. Supongamos por un momento que queremos obtener las rutas absolutas y de directorio del comando ls. Escribiríamos:

guion.mierda
#!/bin/bash
ruta = $ (que ls)
echo 'La ruta absoluta es' $ ruta
eco '-----------------------------------'
Dir_path = $ (dirname $ ruta)
echo 'La ruta del directorio es' $ dir_path

Una ruta es una dirección utilizada para ubicar un archivo o una carpeta. Una ruta absoluta es una dirección o ubicación completa de tal manera que no importa dónde se encuentre, puede recuperar el archivo que desee. Por otro lado, se determina una ruta relativa en relación con el directorio de trabajo actual. En Bash, hay varias formas de recuperar la dirección completa de un script. En particular, podemos usar RealPath, ReadLink o incluso crear nuestro pequeño script personalizado. Cuando queremos conocer la ruta del directorio, podemos usar el comando DirName en nuestro script bash para recuperar nuestra ruta de directorio. Es bastante fácil obtener la dirección completa utilizando una dirección relativa.

Codificación feliz!