Medir el tiempo dentro de un script


8

Este hilo muestra cómo medir el tiempo que lleva ejecutar un script. En mi caso, estoy interesado en medir el tiempo entre dos puntos dentro de un guión . Aquí hay un ejemplo de cómo me gustaría usar esto:

start_measuring_time
Line 1
Line 2
..
Line N
stop_measuring_time
show_elapsed_time

Me gustaría que el tiempo mostrado sea legible por humanos (segundos, minutos, horas, días, etc.), si es posible. ¿Alguna idea de como hacer esto?

Respuestas:


7

Puedes usar dateutil:

#!/bin/bash

start_measuring_time() {
  read s1 s2 < <(date +'%s %N')
}

stop_measuring_time() {
  read e1 e2 < <(date +'%s %N')
}

show_elapsed_time() {
  echo "$((e1-s1)) seconds, $((e2-s2)) nanoseconds"
}

start_measuring_time
sleep 2
stop_measuring_time
show_elapsed_time

Esto producirá errores: los tiempos de inicio y finalización deben interpretarse como segundos + nanosegundos juntos , no por separado; de lo contrario, puede obtener cosas como valores negativos.
rozcietrzewiacz

1
Vea mi respuesta a esta pregunta para una forma de resolver esto.
rozcietrzewiacz

Tuve que votar en contra, ya que no es una respuesta completamente correcta, corregir da valores negativos a veces, pero en su pregunta, ¿por qué no está haciendo eco antes Tend-Tstart y después$(
Munish

11

Podrías usar time:

time (
Line 1
Line 2
..
Line N
)

Creo que la salida del tiempo es legible para los humanos tal como es, pero si su script se medirá en días, etc., consulte las man timeopciones de formato para la salida.


Gracias @frabjous! Creo que aceptaré la respuesta de @ enzotib porque me permite medir el tiempo en flujos de control generales (es decir, no solo en flujos lineales).
Amelio Vazquez-Reina

1

Muestra para probar timerscript.sh:

#!/bin/bash

#timing in minutes with %m
start=`date +%m`
echo 'Start:' $start
#do something e.g. wait for 1.30 minutes 
sleep 90

`end=`date +%m`
echo 'End: '$end
echo 'runtime: '$runtime
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.