Ich habe überprüft diese , aber die Lösung zur Verfügung gestellt hat für mich keine Arbeit.
Mit Datum kann ich die Ausführungszeit in Sekunden erhalten:
T="$(date +%s)"
#some work here
T="$(($(date +%s)-T))"
echo "execution time (secs) ${T}"
Wenn ich dies jedoch versuche:
T="$(date +%s%N)"
#some work here
T="$(($(date +%s%N)-T))"
Wenn ich% N (wie oben) zum Datum hinzufüge, um die Genauigkeit von Nanosekunden zu erhalten, wird der folgende Fehler angezeigt: -bash: 1369320760N: Wert zu groß für Basis (Fehlertoken ist "1369320760N")
Weiß jemand, wie man die Ausführungszeit in Millisekunden mit bash unter Mac OS X misst?
# some work here
ommited erhalte ich Zeiten von 0,2 bis 0,3 Sekunden - was sollte Null (oder zumindest konstant) sein, um Ihr Ziel zu erreichen. Während/usr/bin/time usleep 50000
ergibt sich eine vernünftig stabile Zeit von 0,05 +/- 0,01 Sekunden. (Nur unter Linux getestet, weiß nicht, ob / usr / bin / time und / oder usleep unter OSX verfügbar ist.)Antworten:
Da OSX ein BSD-ähnliches System ist, verfügt die Strftime-Bibliothek nicht über
%N
( http://www.freebsd.org/cgi/man.cgi?query=date )Gibt Ihnen der
time
Befehl bash builtin die Informationen, die Sie benötigen?quelle
Ich würde diesen Weg gehen, wenn ich Millisekunden benötige und BSD das Datum nicht unterstützt
+%s%N
quelle
echo $(($(date +%s%N)/1000000))
Dies würde von Nanosekunden in Millisekunden umgerechnet.Von @mpy
date +%s.%N
funktioniert.Die Ausgabe unterscheidet sich jedoch zwischen Linux und OS X:
Linux:
1369322592.573787111
OS X:
1369322610.N
quelle
date +%s.%N
nicht teilen, sondern nur verwenden (aber ich kann OSX nicht überprüfen; es funktioniert unter Linux). Aber das Problem ist dann, dassbash
‚s$(( ))
IMHO nicht in der Lage ist Gleitkommazahlen zu behandeln.Wenn Sie installieren
coreutils
, können Sie GNU Linuxdate
schriftlich verwendengdate
.coreutils ist mit Homebrew erhältlich :
brew install coreutils
.quelle
Wie in der anderen Antwort erwähnt, unterstützt das Datum von OS X% N (Nanosekunden) nicht.
Könnten Sie die Befehle einfach als Skript speichern? Oder verwenden Sie eine Subshell oder Befehlsgruppe für sie:
Oder summieren Sie die Zeiten einzelner Befehle:
Oder verwenden Sie eine Skriptsprache:
%.3f
ist ein Formatbezeichner für eine Gleitkommazahl mit 3 Dezimalstellen. Time.now ist eine Klassenmethode der Time-Klasse.quelle
ruby -e 'puts "%.3f" % Time.now'
,ruby
ruft das Ruby - Interpreter,-e
führt das Skript aus, die in der Befehlszeile folgt.puts
ist Rubysprintf
(Art),Time
ist ein Rubinobjekt undTime.now
ist die Sekunden seit der Epoche. Durch%.3f
Trimmen wird die Ausgabe auf 3 Dezimalstellen gekürzt, was Millisekunden entspricht (die Teile ".046" und ".943" der Ausgabe).time
handelt es sich um ein Befehlszeilentool, das angibt, wie lange es dauert, den folgenden Befehl auszuführen. Sieheman time
für weitere Details.Glenn hat recht,
time
ist der Befehl, den Sie suchen, aber um die gewünschten Informationen zu analysieren, müssen Sie sie an einen anderen Prozessor wie weitergebensed
.time command-goes-here >/dev/null 2>$1|sed rules-go-here
Dieser Befehl entfernt die Ausgabe des Befehls selbst (sendet sowohl Standard- als auch Fehlerausgaben an / dev / null) und übergibt die Zeitergebnisse an sed, wo Sie die entsprechenden Regeln zum Bearbeiten des Streams und der Ausgabe auswählen müssen der gewünschte Wert.
quelle