UNIX Skript Time Ausgabeverwaltung

kennenburg

Mitglied
Hallo,

ich versuche verzweifelt bei der Zeitmessung des WGET Befehls den Rückgabewert von Time in eine UNIX Variable zu sichern um diesen Inhalt dann weiter bearbeiten zu können.
Der Befehl zum Aufruf von Time sieht folgendermassen aus:

Code:
time wget -T 30 -O $logFile -a $traceFile "$DST_URL"

Dadurch wird automatisch die Ausgabe erzeugt. Ich müsste dies aber verhindern und die Ausgabe in eine Variable umleiten.
Hat da jemand eine Idee?

Ich hab schon sowas versucht:

Code:
test=$(time wget -T 30 -O $logFile -a $traceFile "$DST_URL")

aber das geht auch nicht. Es wird trotzdem ein Output erzeugt und in der Variable $test steht nix!!
 
Hi,

ungetestet, aber wenn du die Ausgabe eines Kommandos in einer Variablen haben möchtest, sollte das mit `` (Backticks) gehen. Also z.B.
Code:
timer=`time wget -T 30 -O $logFile -a $traceFile "$DST_URL"`
danach sollte in $timer die Ausgabe stehen.
 
Hallo,

vielen Dank für dein Posting.
Das funktioniert leider nicht.
An die Variable wird also immnoch kein Wert übergeben!
Eventuell liegt das an der doppelten Funktion "time wget ..."?

Vielleicht noch eine Idee?
 
Hi,

ich hab das ganze jetzt mal getestet, also mit folgendem Code funktioniert es
Code:
timer=`times wget -T 30 -O $logFile -a $traceFile "$DST_URL"`
Der Unterschied ist das ich times statt time genommen habe, dann funktioniert es einwandfrei (zumindest bei mir).
 
Also ich bekomm wenn ich dann $timer bei mir ausgebe:

Code:
0m0.000s 0m0.000s 0m0.000s 0m0.000s

Das hat mich stutzig gemacht und ich hab auch gesehen, dass kein Log und kein Trace File geschrieben wurde. WGET wurde also nicht ausgeführt.
Ist das bei dir auch so?
Faszinierend.
 
Hi.

Also erstmal: die Backticks sind eine andere Schreibweise für $( ) - außer das man die Backticks nicht schachteln kann.

times ist ein Bash builtin Kommando welches die Gesamtzeit der Bash und der User-Programme die von der Bash aus gestartet wurden ausgibt. Es kann dem Kommando kein Parameter übergeben werden.

Das Problem (bzw. der Grund) dafür das die Ausgabe von time nicht in der Variable steht ist das das Bash builtin Kommando time von der Bash speziell behandelt wird und die Ausgabe von Bash selbst nachdem der Befehl ausgeführt wurde gemacht wird und nicht durch das Kommando time. Sonst würde das z.B. bei einer Pipe nicht funktionieren da dann time nur das erste Kommando messen würde, Bash allerdings die Zeit misst die für die komplette Pipe benötigt wurde.

Was du machen könntest ist z.B. date zu benutzen oder ein externes time Kommando (wenn du eins hast).

Code:
start=$(date '+%s')
wget ...
echo "vergangen: $(($(date '+%s')-start)) sek."

# oder 
command time wget ....

Übrigens kann man auch mit "help time" bzw. "help times" in der Bash eine Kurzhilfe anzeigen lassen, oder man schaut mal in der Manpage nach... :google:

Gruß
 
Hallo,

vielen Dank für dein Posting.

Den Befehl date habe ich davor schon benutzt. Hat auch wunderbar funktioniert.
Allerdings ist bei meinem Projekt die Anforderung entstanden, die Zugriffszeiten millisekundengenau zu berechnen. Dies kann die date Funktion leider nicht.
Deshalb bin ich zu time gekommen. Mit dem Befehl TIMEFORMAT="%R" kann ich dann die Millisekunden ausgeben lassen.

Und was nun? Gibt es also keine Möglichkeit in UNIX eine Performancemessung millisekundengenau zu erstellen/auszuwerten und in eine Variable oder Datei zu setzen?

Kann man mit einem anderen Kommando das eventuell?
Ich suche mich schon seit Tagen in Google schlapp.
 
Kannst du mir sagen, wie du das eingestellt hast (Parameter?), dass das bei dir so genau berechnet?
Millisekunden würden genügen :)
Laut der MAN werden nur bis Sekunden herunterberechnet.
Oder hast du dir was eigenes geschrieben?
 
Nö, was eigenes ist das nicht. In meiner Manpage von date (GNU coreutils) 5.93 steht das der Parameter %N Nanosekunden ausgibt.

Die übersetzten Manpages sind manchmal nicht wirklich vollständig bzw. aktuell.
Code:
date '+%s:%N'
1139570063:687500000

Es scheint die letzen 3 Ziffern sind immer 0 - d.h. die Genauigkeit liegt wohl im Microsekundenbereich (unter Cygwin).

Gruß
 
Zuletzt bearbeitet:
Zurück