Mit diesem Gnu Date-Befehl kann ich Millisekunden auf folgende Weise abrufen:
date +%M:%S.%N;
aber dieser befehl funktioniert nicht auf solaris ... irgendwelche ideen?
Mit diesem Gnu Date-Befehl kann ich Millisekunden auf folgende Weise abrufen:
date +%M:%S.%N;
aber dieser befehl funktioniert nicht auf solaris ... irgendwelche ideen?
Antworten:
Dieses "Shell-Skript" sollte Millisekunden anzeigen:
#!/bin/ksh
if [ ! -x /var/tmp/time_ms ]
then
cat > /tmp/time_ms.c << %
#include <sys/time.h>
main()
{
struct timeval tv;
gettimeofday(&tv,(void*)0);
printf("%d.%d\n",tv.tv_sec,tv.tv_usec/1000);
}
%
PATH=$PATH:/usr/sfw gcc /tmp/time_ms.c -o /var/tmp/time_ms
fi
/var/tmp/time_ms
Natürlich können Sie time_ms in Ihrem PATH verschieben und direkt nach dem ersten Lauf aufrufen. Das wird eine schnellere Lösung als Gnu Date oder irgendein Perl / Was auch immer-Skript liefern.
Die wahrscheinlichste Erklärung ist, dass Solaris kein GNU-Datum verwendet oder nicht die neueste Version hat. In der Solaris-Manpage für Datum wird die %N
Formatierungsoption nicht erwähnt . Das GNU-Dokument coreutils für die Zeitkonvertierung gibt an date
, dass %N
es sich um eine GNU-Erweiterung handelt (oh, es sind Nanosekunden, keine Millisekunden).
Wenn Sie die Millisekunden benötigen, ist es am besten, die neuesten GNU-Coreutils herunterzuladen und unter zu installieren /usr/local
(oder /opt/local
wenn Sie es vorziehen). Um die richtige Version von zu erhalten date
, konfigurieren Sie Ihre entweder PATH
so, dass sie /usr/local/bin
vorher kommt, /usr/bin
oder verwenden Sie einen vollständigen Pfad zu /usr/local/bin/date
in Ihrem Skript.
coreutils
in Ihrem Home-Verzeichnis installieren können . Sie können auch Aaron Digullas Perl-Vorschlag ausprobieren.
type -a date
?
./configure --prefix=/home/myuser
. Coreutils Dateien installiert wurden in bin
, lib
und share
Unterverzeichnisse unter meinem Home - Verzeichnis.
Wenn Sie die Zeit messen, die ein Teil des Skripts benötigt, können Sie diesen Teil des Skripts in eine Funktion einfügen und aufrufen time myfunction
. Sie können das times
eingebaute Element auch vor und nach dem Abschnitt aufrufen, für den Sie eine Zeitangabe festlegen möchten, aber das Rechnen selbst ist ein bisschen mühsam.
#!/usr/bin/bash
TSP_MSEC=`perl -MTime::HiRes -e 'print int(1000 * Time::HiRes::gettimeofday),"\n"'`
MSEC=`echo $TSP_MSEC | cut -c11-13`
TSP=`date +%d.%m.20%y" "%H:%M:%S.$MSEC`
echo $TSP
Ergebnis: 15.07.2014 16: 10: 01.260
Perl ist fast überall. Verwenden:
perl -e 'print time()*1000;print "\n";'
Wenn Sie wirklich Millisekundengenauigkeit benötigen, probieren Sie das Time:HiRes
Modul aus .
[EDIT] Kompilieren Sie alternativ ein kleines C-Programm, das gettimeofday()
das Ergebnis aufruft und druckt.
time
Befehl für diese Angelegenheit.