Misurare il tempo all'interno di una sceneggiatura


8

Questo thread mostra come misurare il tempo necessario per eseguire uno script. Nel mio caso, sono interessato a misurare il tempo tra due punti all'interno di una sceneggiatura . Ecco un esempio di come vorrei utilizzare questo:

start_measuring_time
Line 1
Line 2
..
Line N
stop_measuring_time
show_elapsed_time

Vorrei che il tempo visualizzato fosse leggibile dall'uomo (sec, min, ore, giorni, ecc.), Se possibile. qualche idea sul come farlo?

Risposte:


7

Puoi usare 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

Questo produrrà errori: i tempi di inizio e fine devono essere interpretati come secondi + nanosecondi insieme , non separatamente - altrimenti si possono ottenere cose come valori negativi.
rozcietrzewiacz,

1
Vedi la mia risposta a questa domanda per un modo di risolverlo.
rozcietrzewiacz,

Ho dovuto sottovalutare poiché la sua risposta non è completamente corretta, corretta a volte dà valori negativi ma nella tua domanda perché non stai mettendo l'eco prima Tend-Tstart e dopo$(
munish

11

Potresti semplicemente usare time:

time (
Line 1
Line 2
..
Line N
)

Penso che l'output del tempo sia leggibile come è, ma se lo script misura in giorni, ecc., Controlla le man timeopzioni di formattazione per l'output.


Grazie @frabjous! Penso che accetterò la risposta di @ enzotib perché mi permette di misurare il tempo nei flussi di controllo generali (cioè non solo nei flussi lineari).
Amelio Vazquez-Reina,

1

Esempio per provare 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.