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!