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 %NFormatierungsoption nicht erwähnt . Das GNU-Dokument coreutils für die Zeitkonvertierung gibt an date, dass %Nes 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/localwenn Sie es vorziehen). Um die richtige Version von zu erhalten date, konfigurieren Sie Ihre entweder PATHso, dass sie /usr/local/binvorher kommt, /usr/binoder verwenden Sie einen vollständigen Pfad zu /usr/local/bin/datein Ihrem Skript.
coreutilsin 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, libund shareUnterverzeichnisse 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 timeseingebaute 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:HiResModul aus .
[EDIT] Kompilieren Sie alternativ ein kleines C-Programm, das gettimeofday()das Ergebnis aufruft und druckt.
timeBefehl für diese Angelegenheit.