• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

Dauer eines Befehls messen/stoppen mit "time"

mod_che

Morgenduft
Registriert
06.03.07
Beiträge
164
Hallo.
Ich habe ein bash-Shell-Script geschrieben (aufm Mac fürs Terminal), welches aus einer Textdatei Dateinamen zeilenweise liest und diese dann durch den Aufruf eines Java-Scripts von einem Server runterlädt. Das klappt auch, der Aufruf des JAva Scripts folgt in einer Schleife, solange in liste.txt noch Zeilen sind sozusagen. Das klappt auch. Ich hätte gerne eine Anzeige, wie lange ein Schliefendurchgang = einmal Aufruf des Java Scripts = 1 Download dauert. Die Dateien sind nämlich unterschiedlich groß.

Ich habe dem Aufruf ein
Code:
time -p
vorangestellt, misst auch die Zeit, aber die Ausgabe ist immer real x.xxx user x.xxxx und sys x.xxxx und ich will nur real mm:ss haben, den Rest nicht. Pipes funktionieren bei time ja nicht. Wie kann ich das lösen? Schluss endlich will ich die zu erwartende Downloadzeit aus der bisher durchschnittlichen Downloadzeit für alle schon heruntergeladenen Dateien und der Anzahl der noch zu ladenden Dateien (Anzahl und Counter habe ich schon) ermitteln.

Danke und Grüße
 
Dann lies doch mal die Manpage
Code:
man time
Es lassen sich via Option [tt]-f[/tt] (statt [tt]-p[/tt]) beliebige Ausgabeformate definieren.
 
habe ich, da sind nur die optionen -l und -p aufgeführt. -f kennt time nicht.
 
Ups, sorry, ich war unter Linux unterwegs. Da funktioniert die BSD-Version von [tt]time[/tt] wohl wieder anders als die GNU-Variante. Warte mal kurz...
 
Kein Problem, bin für Hilfe dankbar und warte auch gerne kurz ;) Ich dachte eben auch, dass ich mir via (|) nur die "real"-Zeile rausgeben lassen könnte, aber das funktioniert nicht. Schlussendlich will ich nur den Sekundenwert für die Dauer der Befehlsausführung (=1 Download)
 
Code:
date "+%M:%S"

Den Ausgabewert jeweils vor und nach dem Aufruf des Skripts in je eine Variable schreiben und mittels expr die Differenz berechnen, sollte das tun was Du möchtest.
 
Ich dachte eben auch, dass ich mir via (|) nur die "real"-Zeile rausgeben lassen könnte, aber das funktioniert nicht.
Das geht deshalb nicht, weil [tt]time[/tt] seine Ausgabe in die Standardfehlerausgabe [tt]stderr[/tt] schreibt und nicht in die Standardausgabe [tt]stdout[/tt]. Du musst vorher umleiten, etwa so:
Code:
(time -p echo "hallo") 2>&1 | grep "real"
 
habs! danke dir.
Code:
starttime=$(date +%s)
...
echo -e "\t Download file xyz in "$[$(date +%s)-$starttime] "second(s).\n"
 
habs! danke dir.
Code:
starttime=$(date +%s)
...
echo -e "\t Download file xyz in "$[$(date +%s)-$starttime] "second(s).\n"

Ausser: Der Download beginnt zur Sekunde 59 und endet zur Sekunde 03.
Da kommt dann Quatsch raus, den date +%s gibt die aktuelle Sekunde der aktuellen Minute aus!!!
 
Nein, der Befehl gibt die Anzahl der Sekunden von einem Startdatum aus an, ziemlich sicher. Nimmt zumindest keine Werte zwischen 0 und 60 an.
 
Uups ! Hab das kleine "s" als grosses interpretiert :-) Somit hast Du völlig recht!