Me preguntaba cuál es la forma más rápida de ejecutar un script, he estado leyendo que hay una diferencia de velocidad entre mostrar el resultado del script en el terminal, redirigirlo a un archivo o tal vez /dev/null.
Entonces, si el resultado no es importante, ¿cuál es la forma más rápida de hacer que el script funcione más rápido, incluso si es mínimo?
bash ./myscript.sh
-or-
bash ./myscript.sh > myfile.log
-or-
bash ./myscript.sh > /dev/null

Respuestas:
Los terminales en estos días son más lentos de lo que solían ser, principalmente porque las tarjetas gráficas ya no se preocupan por la aceleración 2D. De hecho, imprimir en un terminal puede ralentizar un script, particularmente cuando se trata de desplazarse.
En consecuencia,
./script.shes más lento que./script.sh >script.log, lo que a su vez es más lento que/script.sh >/dev/null, porque estos últimos implican menos trabajo. Sin embargo, si esto hace una diferencia suficiente para cualquier propósito práctico depende de la cantidad de salida que produce su script y qué tan rápido. Si su script escribe 3 líneas y sale, o si imprime 3 páginas cada pocas horas, probablemente no necesite molestarse con las redirecciones.Editar: Algunos puntos de referencia rápidos (y completamente rotos):
En una consola Linux, 240x75:
En un
xterm, 260x78:Redireccionar a un archivo, en un disco Samsung SSD 850 PRO 512GB:
Redirigir a
/dev/null:fuente
timeout 1 yes "This is a looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong line"imprime más de 100000 líneas en un solo segundo en mi MBP)xterms en HP Apollo de hace 30 años solía gatear en comparación conxtermsHP-UX de hace 20 años. Sin embargo, una consola Linux con una tarjeta de video Matrox de hace 15 años era más lenta que la misma consola Linux con una tarjeta S3 de hace 20 años. Y una consola Linux con buffer de cuadros de alta resolución en una tarjeta moderna es simplemente inutilizable. :)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é.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/nullredirigido dentro del bucle.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.
fuente
xterm, que a su vez es ~ 3 veces más lenta que/dev/null.Otra forma de acelerar un script es usar un intérprete de shell más rápido. Compare las velocidades de un bucle ocupado POSIX , ejecute en
bashv4.4 ,kshv93u + 20120801 ydashv0.5.8 .bash:Salida:
ksh:Salida:
dash:Salida:
Un subconjunto de comandos en
bashykshson retrocompatibles con todos los comandos endash. Unbashscript que solo usa comandos en ese subconjunto debería funcionardash.Algunas
bashsecuencias de comandos que utilizan nuevas funciones se pueden convertir a otro intérprete. Si labashsecuencia de comandos depende en gran medida de las características más nuevas, puede que no valga la pena molestarse: algunasbashcaracterísticas nuevas son mejoras que son más fáciles de codificar y más eficientes (a pesar debashser generalmente más lentas), de modo que eldashequivalente (que podría implicar la ejecución) varios otros comandos), sería más lento.En caso de duda, realice una prueba ...
fuente