Estaba ejecutando algunos comandos en una terminal y comencé a preguntarme, ¿Unix/Linux toma atajos cuando ejecuta comandos canalizados?
Por ejemplo, digamos que tengo un archivo con un millón de líneas, las primeras 10 de las cuales contienen hello world
. Si ejecuta el comando grep "hello world" file | head
¿El primer comando se detiene tan pronto como encuentra 10 líneas o continúa buscando primero en todo el archivo?
Respuesta aceptada:
Algo así como. El shell no tiene idea de lo que harán los comandos que está ejecutando, simplemente conecta la salida de uno con la entrada del otro.
Si grep
encuentra más de 10 líneas que dicen "hola mundo" y luego head
tendrá las 10 líneas que quiere y cerrará la tubería. Esto hará que grep
para ser eliminado con un SIGPIPE, por lo que no necesita continuar escaneando un archivo muy grande.