Ejemplos de consejos y trucos de comandos de comandos útiles - Parte 4
- 4285
- 923
- Eduardo Tapia
Continuando con nuestra serie sobre útiles consejos y trucos de línea de comandos de Bash, en el artículo de hoy, exploraremos solo lo que necesita, y comenzaremos con un manual en pwd
y cómo descubrir el camino se inició un script de.
En este tutorial aprenderás:
- Consejos, trucos y métodos de comandos de comandos útiles
- Cómo interactuar con la línea de comandos de Bash de manera avanzada
- Cómo afilar sus habilidades de Bash en general y convertirse en un usuario bash más competente
Requisitos y convenciones de software utilizados
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 |
Ejemplo 1: Directorio de trabajo de ruta? O no?
Es posible que estemos acostumbrados a llamar pwd
en la línea de comando para decirnos el nombre de nuestro directorio actual:
$ pwd/home/roel/workspace
Pero si queremos obtener el directorio del que se inició un script, el uso de esta variable de un script también funciona de la misma manera?
$ Cat test_pwd.sh #!/bin/bash my_path1 = "$ pwd" echo "$ my_path1" my_path2 = "$ (pwd)" echo "$ my_path2"
Copiar Usaremos dos formas de recuperar el camino: miramos (para el primero My_path1
asignación) en el Pwd
(Nivel del sistema operativo) variable de presentación automáticamente, y en el segundo caso (para el segundo My_path2
asignación) ejecutamos pwd
en una subshell (ps
) y asignarlo a My_path2
. Ejecutemos lo mismo:
ps ./test_pwd.sh/home/roel/workspace/home/roel/workspace
Se ve bien, correcto? Sí, tal vez, pero una vez que nos cambiamos a un directorio diferente, y llamamos al script usando su nombre de ruta completo o relativo, el Pwd
variable (o el pwd
comando) dentro del script devolverá el directorio en el que estábamos cuando se inició el script. Verifiquemos esto:
$ mkdir prueba $ cd prueba $ ... /test_pwd.sh/home/roel/workspace/test/home/roel/workspace/test
Lo que podemos ver aquí es que pwd
(o el $ PWD
variable) siempre devolverá la ruta actual real.
Esto puede ser un problema: es posible que deseemos iniciar un subíndice, o acceder a un archivo, desde el mismo directorio (o un subdirectorio del mismo) que el que estaba en el script estaba en. Este es a menudo el caso de scripts bash más complejos que llaman múltiples subíndices y/o archivos de datos y configuración.
Entonces, ¿cuál es una forma uniforme de obtener el camino desde el cual se inició el guión?
Uno puede considerar usar el Dirname "\ $ 0"
dominio:
$ Cat Test2.sh #!/bin/bash echo "\ $ 0" dirname "\ $ 0"
Copiar DirName producirá el nombre de directorio - relativo de cualquier opción que se le pase, y en este caso eso es \ $ 0
- Una variable especial que se establece cuando un script comienza al nombre del script como se inició. Vamos a probarlo:
ps ./Test2.mierda ./Test2.mierda . Prueba de $ CD $ ... /test2.sh… /test2.SH…
Mejor, supongo, y puede ayudar un poco (para tener una idea principalmente), pero aún no nos da un nombre de ruta totalmente calificado. Para esto, podemos usar un envoltorio de subshell doble nombre
en combinación con una ruta calificada completa real obtenida de un pwd
ejecución:
$ cat make_it_work.sh #!/bin/bash my_path = "$ (cd" $ (dirname "\ $ 0") "&& pwd)" echo "$ my_path"
Copiar Veamos si funciona:
ps ./hazlo funcionar.sh/home/roel/espacio de trabajo
Hasta ahora todo bien, pero funciona cuando lo ejecuta desde un subdirectorio?
$ CD test && pwd/home/roel/workspace/test $ .../make_it_work.sh/home/roel/workspace $/home/roel/workspace/make_it_work.sh/home/roel/espacio de trabajo
Sí!
Primero cambiamos a prueba
y verificar que estamos en el prueba
directorio, si ese directorio de cambio (cd
) El comando fue exitoso (según las instrucciones de &&
).
En ambos casos, si se llama de manera relativa (… /
), o con un nombre de ruta totalmente calificado (/Home/Roel/Workspace/
), el resultado es que vemos el directorio desde el cual se inició el script (/Home/Roel/Workspace/
) y no el directorio de trabajo actual real, o pwd (/Home/Roel/Workspace/Test
).
En resumen, puedes usar el My_path = "$ (cd" $ (dirname "\ $ 0") "&& pwd)"
Script de una línea para obtener el nombre de directorio correcto, totalmente calificado, desde sus scripts. Después de esto, usar una adición relativa funcionará bien. Por ejemplo, puedes usar $ My_path/include/mysubscript.mierda
e incluso $ My_path /... /one_dir_up_file.TXT
etc.
Ejemplo 2: Greping solo lo que necesitas
Alguna vez has usado grep
? GREP es una utilidad de línea de comandos de comandos versátiles que le permite seleccionar texto desde un archivo fácilmente. La mayoría de las veces se usa de la siguiente manera:
$ Cat Test Line 1 Mi línea Línea 2 Tus líneas Línea 3 Nuestra línea $ Grep 'Línea 2' Línea de prueba 2 Tus líneas
Tenemos un archivo de entrada con 3 líneas, y buscamos una prueba específica (línea 2
) En ese archivo. Pero, ¿qué tal si solo quieres las líneas que tienen el múltiplo de línea
(i.mi. líneas
) mencionado en ellos? Y, ¿qué tal si solo quería tener solo la palabra antes, incluido el líneas
bit, pero no el real línea x
producción?
En ese caso, podemos GREP solo para lo que necesitamos usar el -O
('Solo') opción para GREP:
$ grep -o 'líneas' líneas de prueba $ grep -o '\ w \+ líneas' Pruebe sus líneas
Bingo! Primero primero para la palabra 'líneas', que se encontró. Luego prefijamos eso con un espacio y una expresión regular que establece en pseudo-text: encuentre un límite de palabra (\ W
), al menos una vez y tantas veces que corresponda (\+
) seguido de un espacio. El resultado es que su
(que tiene límites de dos palabras; un inicio y un final) está incluido. línea 2
no esta incluido. Si bien tiene límites de palabras, no hay sufijo de líneas
a ese.
Si desea obtener más información sobre expresiones regulares en Bash, consulte Bash Regexps para principiantes con ejemplos, avanzado bash regex con ejemplos y también le pueden gustar las expresiones regulares semi-relacionadas con ejemplos.
Conclusión
En este artículo, exploramos pwd
y miró cómo usar pwd
desde dentro de un guión en combinación con nombre
Para recuperar la ruta de directorio totalmente calificada de la cual se inició el script, de una manera que siempre funcionará. También miramos a Greping solo lo que necesitamos usando el -O
opción y, en este caso, expresión regular para que coincidan con los límites de las palabras.
Déjanos un comentario con tus mejores consejos y trucos de la línea de comandos de Bash!
- Ejemplos de consejos y trucos de comandos de comandos útiles - Parte 1
- Ejemplos de consejos y trucos de comandos de comandos útiles - Parte 2
- Ejemplos de consejos y trucos de comandos de comandos útiles - Parte 3
- Ejemplos de consejos y trucos de comandos de comandos útiles - Parte 4
- Ejemplos de consejos y trucos de comandos de comandos útiles - Parte 5
Tutoriales de Linux relacionados:
- Una introducción a la automatización, herramientas y técnicas de Linux
- Mastering Bash Script Loops
- Ejemplos de consejos y trucos de comandos de comandos útiles - Parte 1
- Ejemplos de consejos y trucos de comandos de comandos útiles - Parte 3
- Ejemplos de consejos y trucos de comandos de comandos útiles - Parte 2
- Cosas para instalar en Ubuntu 20.04
- Bucles anidados en guiones Bash
- Ubuntu 20.04 trucos y cosas que quizás no sepas
- Ejemplos de consejos y trucos de comandos de comandos útiles - Parte 5
- Ubuntu 20.04 Guía
- « Ejemplos de consejos y trucos de comandos de comandos útiles - Parte 3
- Ejemplos de consejos y trucos de comandos de comandos útiles - Parte 5 »