GNU/Linux >> Tutoriales Linux >  >> Linux

¿Entrada estándar múltiple? ¿Cómo?

Esta no es una entrada estándar múltiple. Este es un bash'ismo llamado 'Sustitución de procesos'http://tldp.org/LDP/abs/html/process-sub.html

Crea un pseudo archivo (/dev/fd/something ) para cada sustitución. Es bastante útil. El comando solo puede leerse como una secuencia, lo que significa que no puede ir y venir con fseek. Necesita leerlo como un flujo de bytes, como una tubería.

BONUS Respuesta

No necesita hacer demasiado para usar esto. En lo que respecta a su secuencia de comandos, obtiene un nombre de archivo válido en la línea de comando, que se puede abrir () como cualquier otra cosa. Como han dicho otros, verías diff /dev/fd/XX /dev/fd/YY . Si hace una estadística () en cualquiera de estos pseudoarchivos, verá que es una canalización con nombre, y debe tratarla con semántica de canalización, es decir, sin fseek() o ftell(). Si realiza una prueba stat() para ver explícitamente si es un archivo (por ejemplo, [ -f $1 ] ) esto será break:después de todo, esto se implementa como una canalización con nombre.


<(...) hace sustitución de procesos en bash. La salida del proceso en los paréntesis se envía a un descriptor de archivo adicional más allá de los 3 normales, y se devuelve un nombre de archivo correspondiente a ese descriptor de archivo. De esta forma, la salida de un comando se puede tratar como un nombre de archivo para pasar a otro comando.


Hay uno stdin y uno stdout para cada proceso . Por lo general, están conectados al terminal, pero se pueden redirigir por separado.

En el ejemplo, hay dos wget procesos involucrados, cada uno de los cuales tiene su propio stdin y stdout . Cada wget el proceso escribe en - , que es su stdout . Entonces bash sustitución de proceso de <(...) conecta el stdout del proceso a un pseudo-archivo único, desde el cual diff puedo leer. ¡Tenga en cuenta que las dos sustituciones de procesos generan dos pseudoarchivos diferentes! Por lo tanto, diff ve algo como:

diff /dev/fd/XX /dev/fd/YY

donde el stdout de wget -q -O - URL1 está conectado a /dev/fd/XX , y el stdout de wget -q -O - URL2 a /dev/fd/YY .


Linux
  1. Cómo instalar vtop en Linux

  2. Cómo comprimir varios archivos en Linux

  3. ¿Cómo enviar Stdout a múltiples comandos?

  4. Cómo ejecutar el proceso Rsync en segundo plano

  5. Cómo matar el proceso zombie

Cómo escribir emoji en Linux

Cómo matar un proceso en Linux

Cómo MATAR un proceso en Linux

¿Cómo obtener el ID de proceso del proceso en segundo plano?

¿Cómo hago para que sed lea desde la entrada estándar?

Cómo unir varias páginas PDF en una sola página