• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> 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
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
Dann lies doch mal die Manpage
Code:
man time
Es lassen sich via Option [tt]-f[/tt] (statt [tt]-p[/tt]) beliebige Ausgabeformate definieren.
 

mod_che

Morgenduft
Registriert
06.03.07
Beiträge
164
habe ich, da sind nur die optionen -l und -p aufgeführt. -f kennt time nicht.
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
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...
 

mod_che

Morgenduft
Registriert
06.03.07
Beiträge
164
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)
 

NobiMan

Osnabrücker Reinette
Registriert
08.09.09
Beiträge
978
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.
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
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"
 

mod_che

Morgenduft
Registriert
06.03.07
Beiträge
164
habs! danke dir.
Code:
starttime=$(date +%s)
...
echo -e "\t Download file xyz in "$[$(date +%s)-$starttime] "second(s).\n"
 

NobiMan

Osnabrücker Reinette
Registriert
08.09.09
Beiträge
978
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!!!
 

mod_che

Morgenduft
Registriert
06.03.07
Beiträge
164
Nein, der Befehl gibt die Anzahl der Sekunden von einem Startdatum aus an, ziemlich sicher. Nimmt zumindest keine Werte zwischen 0 und 60 an.
 

NobiMan

Osnabrücker Reinette
Registriert
08.09.09
Beiträge
978
Uups ! Hab das kleine "s" als grosses interpretiert :) Somit hast Du völlig recht!