Cómo descubrir, desde el interior de un script de Bash, el camino en el que se encuentra el script

Cómo descubrir, desde el interior de un script de Bash, el camino en el que se encuentra el script

Cuando desarrolla scripts bash complejos y comienza a poner varios scripts en una carpeta, donde un script interactúa con otro, por ejemplo, comenzarlo, se hace necesario rápidamente para asegurarse de que se iniciara la ruta del script, para que podamos comenzar el Otros scripts con un nombre de ruta totalmente calificado. Esto es importante porque el primer script puede haberse iniciado desde fuera del directorio del script. También podríamos haberlo hecho usando una ruta relativa, por lo que incluso, de alguna manera, leer el comando que inició el script actual no funcionará.

En este tutorial, aprenderás:

  • Que pwd el comando es, y lo que hace
  • Cómo descubrir desde el interior de un script de bash en qué ruta se encuentra ese mismo script
Cómo descubrir, desde el interior de un script de Bash, el camino en el que se encuentra el script

Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Independiente de la distribución de Linux
Software Línea de comando bash, sistema basado en Linux
Otro Cualquier utilidad que no esté incluida en el shell bash de forma predeterminada se puede instalar utilizando sudo apt-get instalación de utilidad de utilidad (o yum instalación para sistemas basados ​​en redhat)
Convenciones # - requiere que los comandos de Linux se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
$-Requiere que los comandos de Linux se ejecuten como un usuario regular no privilegiado

Que es PWD?

El pwd El comando en Linux devuelve el Directorio de trabajo de ruta Cuando se ejecuta. Cualquiera que sea la ruta en la que nos encontremos actualmente, y hemos navegado previamente (o que hayan sido colocados por nuestro sistema operativo, como, por ejemplo, cuando abramos un símbolo/terminal del sistema), será lo que se devuelve cuando ejecutamos pwd.

$ cd / $ pwd / $ cd / home $ pwd / home 


Aquí, cambiamos al directorio raíz (/) y ejecutado pwd. Nuestra ruta actual era el directorio raíz, entonces / es regresado. Luego cambiamos a la /hogar directorio y ejecutado pwd de nuevo. El camino devuelto es ahora /hogar.

Dentro de un guión de Bash, el pwd El comando funcionará de la misma manera. También es digno de mención saber que desde un script bash (y en la línea de comando fuera de un script bash), podemos usar la variable de sistema operativo especial $ Pwd que automáticamente se mantendrá actualizado por el sistema operativo para contener nuestra ruta actual. Esto nos ahorra tener que hacer algo como llamar a una subshell, yo.mi. Mypath = "$ (pwd)" no es necesario, simplemente podemos invocar el $ Pwd variable.

Para que podamos usar PWD, correcto?

No exactamente. Imagine la siguiente situación:

$ touch 'mypath.sh '$ echo'#!/bin/bash '>> mypath.sh $ echo 'echo $ pwd' >> mypath.sh $ chmod +x mypath.mierda 

Aquí definimos un script llamado mi camino.mierda y lo hizo ejecutable. A continuación, subimos un directorio desde nuestro directorio de inicio y ejecutamos nuestro script:

$ pwd /home /roel $ cd ... $ ./roel/mypath.sh /casa 

Mientras que el pwd comandar dentro de nuestro mi camino.mierda El script funciona correctamente, hay un problema aquí: pwd ha devuelto el camino en el que nos encontramos actualmente, a saber /hogar mientras que el guión en realidad se almacena en el /Inicio/Roel directorio!

Recuerda el título del artículo; Estamos buscando el camino en el que se almacena el script! Entonces, ¿cómo podemos encontrar esto??

El método!

Mientras que no hay una variable especial en Bash para cubrir la ruta en la que se almacena el script, hay un método simple para obtenerlo.

$ cd - /home /roel $ touch 'myPath2.sh '$ echo'#!/bin/bash '>> mypath2.sh $ echo 'mypath = "$ (cd" $ (dirname \ $ 0) "&& pwd)"' >> mypath2.sh $ echo 'echo "$ mypath"' >> mypath2.sh $ chmod +x mypath2.mierda 


Aquí definimos un script secundario llamado mypath2.mierda. Dentro de él colocamos un pequeño código especial ($ (CD "$ (dirname \ $ 0)"; && pwd)) que encontrará la ruta en la que se encuentra el script (cambiando en su directorio, según el \ $ 0 variable (que es el nombre del script de la forma en que lo llamamos, yo.mi. utilizando una posible ruta relativa o totalmente calificada) y solicitar el nombre de Dirname para ella (por referencia, y tenga en cuenta que aún puede ser una ruta relativa si el script se inició usando una ruta relativa), y luego cambiando (a través de la cd) y posteriormente solicitando el pwd (Directorio de trabajo de ruta) para el mismo, dándonos la ruta totalmente calificada.

Veamos si esto funciona más correctamente que solo usar pwd:

$ CD ... $ PWD /HOME $ ./Inicio/MyPath2.sh /home /roel 

El script funciona correctamente, y aunque mypath2.mierda se llamó relativamente, desde fuera del directorio de donde reside el script, la salida devuelta correctamente reflejó la información solicitada; el camino donde existe el guión. Almacenamos lo mismo en el $ MyPath variable, y esta variable ahora podría usarse, por ejemplo, llamar $ MyPath/someOtherscript.mierda dónde SomeTherScript.mierda es otro script en el mismo directorio que mypath2.mierda

Conclusión

En este artículo, primero miramos pwd y si satisfaría el problema en cuestión, descubriendo el camino en el que reside nuestro script, en todo momento. Mientras pwd Puede funcionar si no hemos cambiado los directorios, no funcionará correctamente si estamos fuera de la ruta en la que se encuentra el script. Luego presentamos una pequeña pieza de código (Mypath = "$ (cd" $ (dirname \ $ 0) "&& pwd)" que siempre devolverá el directorio que nuestro script está correctamente.

Un pequeño código, pero una gran solución para nuestro problema de codificación de script de bash! Disfrutar!

Tutoriales de Linux relacionados:

  • Carpeta zip en Linux
  • Cómo mover la carpeta en Linux
  • Cómo verificar el uso del disco por carpeta en Linux
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Cosas para instalar en Ubuntu 20.04
  • Cómo crear archivos encriptados comprimidos con alquitrán y GPG
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?
  • Sistema colgado de Linux? Cómo escapar a la línea de comando y ..
  • Mastering Bash Script Loops
  • Ejemplos de consejos y trucos de comandos de comandos útiles - Parte 4