GNU/Linux >> Tutoriales Linux >  >> Linux

Sustitución de procesos:una forma poco común pero avanzada de redirección de entrada/salida en Linux

Probablemente ya esté familiarizado con la entrada/salida y la redirección de tuberías en Linux.

Déjame hablarte de una característica similar pero avanzada llamada sustitución de procesos.

Encontrará dos tipos de sintaxis para la sustitución de procesos:

<(commands)

o

>(commands)

Déjame ir un poco en detalle.

Sustitución del proceso Bash

Descubrirá que la sustitución de procesos se puede usar de manera similar a la redirección STDOUT o STDIN.

Con <(commands) operador, se lee de la sustitución. Esto significa que commands está configurado para usarlo como stdout .

Por ejemplo, el siguiente comando usa la salida de ls *sh :

wc -l <(ls *sh)

Esto es equivalente a:

ls *sh | wc -l

Con >(commands) operador, escribes a la sustitución. Esto significa que commands está configurado para usarlo como stdin .

En otras palabras, cuando tiene un comando que genera un archivo pero desea que se escriba en algún otro comando en lugar del archivo.

Aquí hay un ejemplo que debería aclarar un poco las cosas:

tar -cf >(ssh remote_server tar xf -) .

¿Te imaginas lo que hace? Así es. Acaba de transferir todo el contenido del directorio actual a un servidor remoto. El archivo de almacenamiento se crea sobre la marcha y se extrae en el servidor.

Para ser honesto, >(...) El operador es menos común. Encontrarás que <(...) se puede usar con más frecuencia.

Entonces, ¿cuál es la ventaja de la sustitución de procesos si funciona como la redirección normal de entrada y salida?

Se dará cuenta del poder y la utilidad de la sustitución del proceso bash cuando tenga varias canalizaciones de comandos para combinar en un solo comando.

Ventaja de la sustitución del proceso de bash

El uso más obvio y frecuente de la sustitución de procesos es la comparación de los resultados de dos programas. Déjame mostrártelo con un ejemplo práctico.

Digamos que tiene algunos archivos de programa C y sus correspondientes archivos de objeto (archivo .out) con el mismo nombre en un directorio.

ls *
aa.c aa.out bb.c bb.out cc.c cc.out ...

Aquí está su objetivo. Desea verificar si cada archivo C tiene su archivo de salida correspondiente con el mismo nombre que el archivo C o no.

Su enfoque típico sería enumerar los archivos filtrados por extensión y luego usar el comando cortar con delimitador .(punto) para extraer el nombre del archivo sin extensión:

ls *.c | cut -d. -f1
aa
bb
cc
dd

Su enfoque típico sería guardar la salida de los archivos *.c y *.out en archivos temporales y luego comparar estos archivos con el comando diff. ¿Tengo razón?

ls *.c | cut -d. -f1 > c.txt
ls *.out | cut -d. -f1 > out.txt
diff c.txt out.txt
rm c.txt out.txt

Puede usar el directorio /tmp para crear archivos temporales, pero aún tiene tres líneas de comandos.

Puede usar maravillosamente la sustitución de procesos para reemplazar todo lo anterior con un solo comando sin crear archivos temporales:

diff <(ls *.c | cut -d. -f1) <(ls *.out | cut -d. -f1)

No necesitaba crear ningún archivo temporal aquí y esa es la clave. Este es mi consejo sobre cuándo debe usar la sustitución de procesos.

Siempre que crea que necesita un archivo temporal para hacer algo, considere si se puede usar la sustitución del proceso.

La sustitución del proceso es una característica de bash y puede o no funcionar con otro shell.

Espero que intente utilizar la sustitución de procesos en el futuro. Como puedes ver, es bastante útil. Doy la bienvenida a sus preguntas y sugerencias.


Linux
  1. 8 comandos de Linux para una gestión de procesos eficaz

  2. Trabajar con entrada, salida y redirección de errores en Linux

  3. 30 ejercicios de procesos de Linux para administradores de sistemas

  4. Linux:¿cómo dejar de compartir la red para el proceso actual?

  5. Linux – Referencias ¿Pero para Linux?

Comando Linux dd explicado para principiantes (8 ejemplos)

Los 30 mejores ejemplos de comandos para monitorear en Linux

Explicación de la redirección de entrada y salida en Linux

Explicado:entrada, salida y redirección de errores en Linux

Comandos para la Gestión de Procesos en Linux

Process Monitor equivalente para Linux?