shell – Sustitución de procesos y tubería

Pregunta:

Me preguntaba cómo entender lo siguiente:

Conectar la salida estándar de un comando al estándar de otro es una técnica poderosa. Pero, ¿qué sucede si necesita canalizar la salida estándar de varios comandos? Aquí es donde entra en juego la sustitución de procesos.

En otras palabras, ¿puede la sustitución de procesos hacer todo lo que puede hacer la tubería?

¿Qué puede hacer la sustitución del proceso, pero no la tubería?

Respuesta:

Una buena forma de asimilar la diferencia entre ellos es experimentar un poco en la línea de comandos. A pesar de la similitud visual en el uso del carácter < , hace algo muy diferente a una redirección o tubería.

Usemos el comando date para probar.

$ date | cat
Thu Jul 21 12:39:18 EEST 2011

Este es un ejemplo inútil, pero muestra que cat aceptó la salida de la date en STDIN y la escupió. Se pueden lograr los mismos resultados mediante la sustitución de procesos:

$ cat <(date)
Thu Jul 21 12:40:53 EEST 2011

Sin embargo, lo que sucedió detrás de escena fue diferente. En lugar de recibir una secuencia STDIN, a cat se le pasó el nombre de un archivo que necesitaba abrir y leer. Puedes ver este paso usando echo lugar de cat .

$ echo <(date)
/proc/self/fd/11

Cuando cat recibió el nombre del archivo, leyó el contenido del archivo por nosotros. Por otro lado, echo solo nos mostró el nombre del archivo que se pasó. Esta diferencia se vuelve más obvia si agrega más sustituciones:

$ cat <(date) <(date) <(date)
Thu Jul 21 12:44:45 EEST 2011
Thu Jul 21 12:44:45 EEST 2011
Thu Jul 21 12:44:45 EEST 2011

$ echo <(date) <(date) <(date)
/proc/self/fd/11 /proc/self/fd/12 /proc/self/fd/13

Es posible combinar la sustitución de procesos (que genera un archivo) y la redirección de entrada (que conecta un archivo a STDIN):

$ cat < <(date)
Thu Jul 21 12:46:22 EEST 2011

Se ve más o menos igual, pero esta vez se pasó cat STDIN stream en lugar de un nombre de archivo. Puedes ver esto probándolo con echo:

$ echo < <(date)
<blank>

Como echo no lee STDIN y no se pasó ningún argumento, no obtenemos nada.

Las canalizaciones y las redirecciones de entrada envían contenido a la transmisión STDIN. La sustitución de procesos ejecuta los comandos, guarda su salida en un archivo temporal especial y luego pasa ese nombre de archivo en lugar del comando. Cualquier comando que esté utilizando lo trata como un nombre de archivo. Tenga en cuenta que el archivo creado no es un archivo normal, sino una tubería con nombre que se elimina automáticamente una vez que ya no se necesita.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım