× Für diese Funktion musst du eingeloggt sein.
BASH. Zeitdifferenz mit Funktion ermitteln
Status:
Gelöst
|
Ubuntu-Version:
Kubuntu 18.04 (Bionic Beaver)
Antworten |
michahe
Anmeldungsdatum: 12. Dezember 2013
Beiträge: 857
Hallo,
in einem Bash-Skript (mit langer Laufzeit) möchte ich mehrfach an bestimmten Kontrollpunkten die bis dahin verstrichene Zeit ausgeben und dachte an ein Funktionen; aber meine Berechnung klappt nicht:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #!/bin/bash
function timestamp()
{
date +%Y-%m-%dT%H:%M:%SZ
}
function duration()
{
t2 = $( timestamp)
# date -u -d "0 $t2 sec - $t1 sec" +"%M:%S [mm:ss]" # dieser Ansatz ist FALSCH
}
t1 = $( timestamp)
echo $t1
sleep 2
echo "Dauer bisher: $( duration) "
Wie mache ich's richtig?
Danke, Michael
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
Hallo!
Ich würde einfch mit dem timestamp rechnen:
1
2
3
4
5
6
7
8
9
10
11
12 function timestamp() {
date +%s
}
startzeit = $( timestamp)
sleep 1 #23;
jetzt = $( timestamp)
date -d @$jetzt +'%Y-%m-%dT%H:%M:%SZ'
date -d @$startzeit +'%Y-%m-%dT%H:%M:%SZ'
echo $jetzt minus $startzeit
echo Differenz: $(( jetzt - startzeit ))
fork991
Anmeldungsdatum: 26. Mai 2010
Beiträge: 58
Erklärungen zu diesem timestamp("Epoch"):
https://de.wikipedia.org/wiki/Unixzeit
coram
Anmeldungsdatum: 17. Januar 2015
Beiträge: 645
Wohnort: Freiburg
Eine Alternative mit ps :
#!/bin/bash
function duration()
{
ps -o etime = -C " $( basename $0 ) "
}
sleep 2
echo -n "Dauer bisher:"
duration
ps gibt hier die vergangene Zeit (Option -o etime= ) des laufenden Skripts (Option -C "$(basename $0)" ) aus.
michahe
(Themenstarter)
Anmeldungsdatum: 12. Dezember 2013
Beiträge: 857
Danke Euch,
ich habe schließlich die Methode von ChickenLipsRfun2eat etwas umgebaut, da der Aufruf ja mehrfach benötigt wird, und noch formatiert:
1
2
3
4
5
6
7
8
9
10
11
12 #!/bin/bash
function TimeUsed() {
TimeNow = $( date +%s)
# date -d @$TimeNow +'%Y-%m-%dT%H:%M:%SZ'
# date -d @$TimeStart +'%Y-%m-%dT%H:%M:%SZ'
TimeUsed = $(( TimeNow - TimeStart ))
echo "Zeit Dauer [hh:mm:ss]: " $( printf "%.2i\n" $(( TimeUsed / 3600 ))) ":" $( printf "%.2i\n" $(( TimeUsed % 3600 / 60 ))) ":" $( printf "%.2i\n" $(( TimeUsed % 60 )))
}
TimeStart = $( date +%s)
sleep 61
TimeUsed # Function aufrufen
Irgendwelche Gegenanzeigen? Verbesserungspotential?
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
Du kannst printf auch mit mehreren Argumenten aufrufen: Liest sich besser:
printf '[hh:mm:ss]:%.2d:%.2d:%.2d\n' $(( TimeUsed / 3600 )) $(( TimeUsed % 3600 / 60 )) $(( TimeUsed % 60 ))
michahe
(Themenstarter)
Anmeldungsdatum: 12. Dezember 2013
Beiträge: 857
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17608
Wohnort: Berlin
Oder mit "date" die Ausgabe formatieren:
date -d "1970/01/01 + $TimeUsed seconds" +"Zeit Dauer [hh:mm:ss]: %H:%M:%S"