Hubiera aceptado instintivamente la respuesta de Satō Katsura; que tiene sentido. Sin embargo, es bastante fácil de probar.
Probé escribir un millón de líneas en la pantalla, escribir (agregar) a un archivo y redirigir a /dev/null
. Probé cada uno de estos por turno, luego hice cinco réplicas. Estos son los comandos que usé.
$ time (for i in {1..1000000}; do echo foo; done)
$ time (for i in {1..1000000}; do echo foo; done > /tmp/file.log)
$ time (for i in {1..1000000}; do echo foo; done > /dev/null)
Luego tracé el total de veces a continuación.
Como puede ver, las presunciones de Satō Katsura eran correctas. Según la respuesta de Satō Katsura, también dudo que el factor limitante sea la salida, por lo que es poco probable que la elección de la salida tenga un efecto sustancial en la velocidad general del guión.
FWIW, mi respuesta original tenía un código diferente, que tenía el archivo anexado y /dev/null
redirigido dentro del bucle.
$ rm /tmp/file.log; touch /tmp/file.log; time (for i in {1..1000000}; do echo foo >> /tmp/file.log; done)
$ time (for i in {1..1000000}; do echo foo > /dev/null; done)
Como John Kugelman señala en los comentarios, esto agrega muchos gastos generales. Dado que la cuestión está, esto no es realmente el camino correcto para probarlo, pero lo dejaré aquí, ya que muestra claramente el costo de volver a abrir un archivo repetidamente desde dentro de la propia secuencia de comandos.
En este caso, los resultados se invierten.