Zeit innerhalb eines Skripts messen

8

Dieser Thread zeigt, wie Sie die Zeit messen, die zum Ausführen eines Skripts benötigt wird. In meinem Fall bin ich daran interessiert, die Zeit zwischen zwei Punkten innerhalb eines Skripts zu messen . Hier ist ein Beispiel, wie ich dies verwenden möchte:

start_measuring_time
Line 1
Line 2
..
Line N
stop_measuring_time
show_elapsed_time

Ich möchte, dass die angezeigte Zeit nach Möglichkeit für Menschen lesbar ist (Sekunden, Minuten, Stunden, Tage usw.). Irgendwelche Ideen, wie das geht?

Amelio Vazquez-Reina
quelle

Antworten:

7

Sie können dateutil verwenden:

#!/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
Enzotib
quelle
Dies wird Fehler erzeugen: die Anfangs- und Endzeiten müssen als Sekunden + ns interpretiert werden zusammen , nicht getrennt - Sie Dinge wie negative Werte sonst bekommen kann.
Rozcietrzewiacz
1
In meiner Antwort auf diese Frage finden Sie eine Möglichkeit, dies zu lösen.
Rozcietrzewiacz
Ich hatte seit seiner nicht comletely richtige Antwort auf downvote, korrigieren sie negative Werte zu Zeiten , aber in Ihrer Frage gibt , warum nicht Sie Echo vor der Inbetriebnahme sind Tend-Tstart und nach$(
Munish
11

Sie könnten einfach verwenden time:

time (
Line 1
Line 2
..
Line N
)

Ich denke, die Ausgabe der Zeit ist so wie sie ist für den Menschen lesbar. Wenn Ihr Skript jedoch in Tagen usw. gemessen werden soll, prüfen Sie, ob man timeFormatierungsoptionen für die Ausgabe verfügbar sind.

frabjous
quelle
Danke @frabjous! Ich denke, ich werde die Antwort von @ enzotib akzeptieren, weil ich damit die Zeit in allgemeinen Kontrollflüssen messen kann (dh nicht nur in linearen Flüssen).
Amelio Vazquez-Reina
1

Beispiel zum Ausprobieren von 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
Jorduino
quelle