
Hä? Obwohl die man-page vom Unix-Befehl time eindeutig Optionen anzeigt, wie z. B. das Schreiben der Ausgabe in eine Datei, funktionieren die dort beschriebenen Argumente nicht. Ein Beispiel:
$ time -o "log" sleep 2 |
-o: Befehl nicht gefunden real 0m0.710s user 0m0.220s sys 0m0.060s |
Wie gesagt, -a und -o müssten möglich sein. Ich habe es dann letztendlich mit Pipes versucht, aber das war auch nicht die Lösung. Für mein aktuelles Projekt – und den kommenden Artikel – benötige ich die Funktion aber. Also an die Arbeit.
bash war’s!
Nach ein wenig Recherche findet man dann heraus, dass das Eingeben des Befehls time in einer Bourne-Shell nicht das Programm /usr/bin/time startet. Die Version in der Shell ist dabei ohne Argumentannahme kompiliert, die im Verzeichnis liegende mit diesen Optionen.
Startet man also explizit die Version aus dem genannten Verzeichnis, funktioniert time nun auch so, wie man es erwartet. Die Ausgabe sieht auch anders aus; nicht so schön formatiert. Zuerst der Test ohne Optionen:
$ /usr/bin/time sleep 2 |
0.00user 0.00system 0:02.00elapsed 0%CPU (0avgtext+0avgdata 2480maxresident)k 0inputs+0outputs (0major+203minor)pagefaults 0swaps |
Zeitlos schön
Funktioniert also. Um das ganze auch noch etwas zu verschönern, machen wir uns die (nun möglichen) Optionen zu nutze und wählen die Ausgabe, die für uns brauchbar ist. Für mich ist das im Moment der übergebene Konsolenbefehl (%C) und die Real-Laufzeit desselben (%e), getrennt von einem Tab (\t). Gleichzeitig möchte ich die Ausgabe jetzt nicht in die Standardausgabe stdout, sondern in eine Datei "log" leiten, die nicht überschrieben, sondern ergänzt wird.
$ /usr/bin/time -a -o "log" -f "%C\t%e" sleep 2; cat log |
sleep 2 2.00 |
Der Befehl cat liest danach sofort die erzeugte Datei und siehe da: Endlich haben wir die gewünschte Ausgabe im richtigen Format, in der richtigen Datei.
Schlagworte: Konsole, Linux, Ubuntu, ubuntuusers.de, Unix