Pipa doble Bash

Numan Shafi 15 febrero 2024
  1. Tuberías en Bash
  2. Diferencia entre tubería simple y tubería doble
  3. Conclusión
Pipa doble Bash

Este artículo explora las tuberías y las tuberías dobles en la medida suficiente. Discutirá el uso, las notaciones y los impactos de las canalizaciones en los scripts de comandos de Bash.

En la vida real, las tuberías transportan fluidos o gas de un lugar a otro. Pero en Bash, las tuberías no transportan los fluidos sino que pasan la salida de un comando como la entrada del siguiente comando.

Tuberías en Bash

Una tubería es un operador de redirección que transmite la salida del comando a la entrada del siguiente comando. El | El símbolo se usa como tubería en Bash.

También podemos decir que en los sistemas Linux/UNIX, una tubería conecta el stdout de un comando con el stdin del otro comando.

Las canalizaciones también se utilizan para combinar dos o más comandos en los que la salida del comando anterior se convierte en la entrada del comando siguiente. Esto elimina la sobrecarga del uso de archivos.

Por lo general, cuando tenemos que extraer información relacionada del archivo, primero guardamos la salida anterior en el archivo y leemos del archivo para convertir la secuencia del archivo a la salida requerida.

Sin embargo, en las canalizaciones, la salida de un comando alimenta directamente al otro comando como entrada. A continuación se muestra la notación básica del comando.

Comand-1 | command-2 | .... | command-N

Agregar tubería entre ls y grep

Ahora veremos el ejemplo en el que una tubería conecta la salida de un comando con la entrada del siguiente comando. En este ejemplo, elegiremos el archivo deseado por su nombre de un grupo de archivos en un directorio determinado.

Simplemente abra la terminal y vaya al directorio desde donde colocó el archivo, y escriba el comando ls en él. El comando ls -l listará los detalles de los archivos del directorio seleccionado.

Sin embargo, nuestro objetivo es elegir la salida de ls -l, agregar una canalización y buscar un nombre de archivo en particular para que la salida solo contenga el archivo requerido.

Siguiendo el código, primero enumere el nombre de todos los archivos en un directorio determinado.

ls -l

Salida para el comando ls

El directorio actual tiene tres archivos; sus detalles se muestran en la captura de pantalla. Sin embargo, estamos interesados en los detalles del archivo bash_double_pipe.md.

Usaremos el pipe y grep ese archivo con su nombre.

El siguiente código mostrará los detalles de bash_double_pipe.md.

ls -l | grep "bash_double_pipe.md"

ls con comando de canalización

Evite la redirección de E/S mediante tuberías

Las tuberías no utilizan la entrada o salida estándar durante las redirecciones. Las tuberías se implementan en la memoria principal.

El siguiente ejemplo mostrará la redirección de flujo con y sin las tuberías.

Redirección de E/S sin tubería

ls -l > temp

more < temp

El código anterior redirige la salida de ls -l al archivo temp y luego muestra el contenido del archivo temp en la pantalla. La siguiente captura de pantalla muestra el resultado del código en ejecución anterior.

redirección io

Ahora, exploraremos la redirección de IO sin usar la entrada o salida estándar de la tubería. El ejemplo anterior redirige la salida del primer comando a la entrada del segundo comando.

El siguiente código sirve para la misma operación de redirección de E/S pero usa una canalización.

ls -l | more

El código anterior realizará la misma operación de redirección sin disco IO. La siguiente captura de pantalla muestra los resultados del comando de ejecución anterior.

redirección io con bash

La captura de pantalla anterior muestra que podemos hacer redirecciones usando la tubería sin disco IO.

Use Pipe en los comandos cat, grep, tee y wc

Las tuberías también son muy útiles en los comandos cat, grep, tee y wc. Digamos que queremos ver cuántas veces ocurre un registro en el archivo.

Luego, en lugar de crear muchas variables, necesitamos usar la tubería entre estos comandos y obtener el resultado requerido.

El siguiente código muestra el uso de los comandos cat, grep, tee y wc junto con las tuberías.

cat abc.txt | grep "temp" | tee file2.txt | wc -l

El comando cat pasa todo el contenido del abc.txt y pasa al comando grep. El comando grep solo selecciona las filas con la cadena coincidente con temp.

Luego, las filas que contienen la cadena temp se pasan al comando tee, que escribe la salida en file2.txt.

Después de eso, esta salida se pasa al comando wc, que cuenta el número del registro que contiene. El file2.txt tiene tres filas; la salida del comando anterior es 3.

tubo de gato grep

Resumiendo el artículo, las canalizaciones son muy útiles para transferir la salida de un comando a la entrada del siguiente comando.

Diferencia entre tubería simple y tubería doble

Tubo simple | envía la salida de un comando a la entrada del siguiente comando pero doble tubería || no es similar a la tubería única. La tubería doble representa el operador OR y generalmente se usa en declaraciones condicionales.

Sintaxis del Operador OR y Evaluación de Cortocircuito

El siguiente código muestra la notación básica de la tubería doble.

command-1 || command-2

El código anterior muestra la notación básica y el uso de || operador. Bash admite la evaluación de cortocircuitos.

La evaluación de cortocircuito significa que la evaluación de una condición se detiene y devuelve la decisión final poco después de que se aclara. Por ejemplo, una condición compuesta que tenga múltiples expresiones combinadas con el operador OR se detendrá tan pronto como una de las expresiones resulte ser verdadera.

No evalúa más otras expresiones, ya que sus resultados ya no afectarán la decisión final.

Por lo tanto, el intérprete de Bash intenta ejecutar el primer comando en el script de Bash anterior. Si el primer comando se ejecuta con éxito, entonces “comando-2” no se ejecutará.

El segundo comando solo se ejecutará si el primer comando no se ejecuta correctamente.

Exploremos el ejemplo de la tubería doble.

ls -a || echo "hello world"

En el script anterior, en comando-1, enumeramos los elementos del directorio actual. Mientras que en comando-2, imprimimos el mensaje hola mundo.

Usamos la tubería doble entre estos dos comandos. Cuando ejecutamos el comando anterior, comando-1 enumera con éxito los elementos del directorio actual y, por lo tanto, comando-2 se ignora.

Ahora exploremos el escenario en el que el comando-1 no se ejecuta con éxito.

ls a || echo "hello world"

El comando anterior muestra el escenario en el que se ejecuta el segundo comando. En el primer comando, no usamos un guión (-) antes de la bandera a; por lo tanto, este comando no se ejecutará correctamente.

Entonces, el operador OR ejecutará el comando echo, que imprime el mensaje hola mundo.

La siguiente captura de pantalla muestra el resultado de los dos comandos anteriores.

tubo doble

La idea anterior se puede extender al encadenamiento de cualquier número de comandos. Por ejemplo, el siguiente script encadenará cuatro comandos con el || operador, y la evaluación comenzará de izquierda a derecha.

Una vez que cualquier comando se ejecuta con éxito, se omitirán todos los comandos restantes a la derecha.

Command-1 || Command-2 || Command-3 || command-4

Conclusión

Este artículo discutió los letreros de tubería simple y doble y sus funcionalidades. El símbolo de tubería única representa la tubería de Linux, que coloca la salida de un comando en la entrada de otro.

Por otro lado, el signo de doble tubería es un operador lógico O y es útil en operaciones lógicas.

Artículo relacionado - Bash Pipe