könnten Sie die time
verwenden ausführbare Datei (nicht die bash gebautet weil das externe Programm verfügt über die Formatoption -f
und liefert die Zeit als [hours:]minutes:seconds
und ich bin jetzt nicht in der Stimmung, eine Stunde zu warten, um herauszufinden, wie das Builtin zeigt uns die Stunden :)) und awk wie dies (am Beispiel sleep 2
):
/usr/bin/time -f "%E" sleep 2 2> >(
awk -F : '
{ if(FN>2) printf("%02d hours %02d minutes %02d seconds\n", $1, $2, $3)
else printf("%02d minutes %02d seconds\n", $1, $2)
}'
)
Hier verwenden wir /usr/bin/time
mit seiner -f
Option. Dann leiten wir die Ausgabe von stderr in awk
die Zeichenfolge bei :
teilen. (Zeit schreibt in stderr, so müssen wir die 2>
stderr in die >(awk ...)
Filter umleiten.
Die awk Filter entscheidet über die Anzahl der Felder in NF
welche printf
Aussage es verwendet.
Vielen Dank für die Hilfe. ich habe versucht, verschiedene Versionen und dies ist für mich: ' START_TIME = $ (Datum + "% s") # tun, um meine Befehle end_time = $ (Datum + "% s") Dauer = $ (($ end_time- $ start_time)) Stunden = $ (printf '% 02d' "$ (($ du Ration/3600)) ") Minuten = $ (printf '% 02d' "$ ((($ duration% 3600)/60))") Sekunden = $ (printf '% 02d'" $ (($ duration% 60)) ") if [$ Stunden -eq 0] dann com_time = $ (printf "$ Minuten: $ Sekunden Minuten") sonst com_time = $ (printf "$ Stunden: $ Minuten Stunden") fi ' – Gurkenglas