Para comparar los tiempos de ejecución de los scripts entre diferentes shells, algunas respuestas de SE sugieren usar bash
el comando incorporado de la siguiente time
manera:
time bash -c 'foo.sh'
time dash -c 'foo.sh'
... etc , para cada shell para probar. Tales puntos de referencia no logran eliminar el tiempo tomado para cada shell para cargar e inicializar sí . Por ejemplo, suponga que los dos comandos anteriores se almacenaron en un dispositivo lento con la velocidad de lectura de un disquete anterior , (124KB / s), dash
(un ejecutable de ~ 150K ) se cargaría aproximadamente 7 veces más rápido que bash
( ~ 1M ), el shell el tiempo de carga sesgaría los time
números: los tiempos de precarga de esos proyectiles son irrelevantes para medir los tiempos de ejecución foo.sh
debajo de cada proyectil después de cargar los proyectiles.
Cuál es la mejor util portátil y en general a una duración de tiempo de la escritura que se pueden ejecutar desde dentro de cada capa? Entonces, el código anterior se vería así:
bash -c 'general_timer_util foo.sh'
dash -c 'general_timer_util foo.sh'
NB: no hay comandos integrados de shell time
, ya que ninguno es portátil o general.
Mejor aún si la utilidad también es capaz de comparar el tiempo que tardan los comandos internos y las canalizaciones de un shell, sin que el usuario tenga que envolverlos primero en un script. La sintaxis artificial como esta ayudaría:
general_timer_util "while read x ; do echo x ; done < foo"
Algunos proyectiles time
pueden manejar esto. Por ejemplo bash -c "time while false ; do : ; done"
funciona. Para ver qué funciona (y qué no) en su sistema, intente:
tail +2 /etc/shells |
while read s ; do
echo $s ; $s -c "time while false ; do : ; done" ; echo ----
done
/usr/bin/time
?