Nur eine kleine Frage zu Timing-Programmen unter Linux: Mit dem Befehl time kann die Ausführungszeit eines Programms gemessen werden:
[ed@lbox200 ~]$ time sleep 1
real 0m1.004s
user 0m0.000s
sys 0m0.004s
Welches funktioniert gut. Wenn ich jedoch versuche, die Ausgabe in eine Datei umzuleiten, schlägt dies fehl.
[ed@lbox200 ~]$ time sleep 1 > time.txt
real 0m1.004s
user 0m0.001s
sys 0m0.004s
[ed@lbox200 ~]$ cat time.txt
[ed@lbox200 ~]$
Ich weiß, dass es andere Zeitimplementierungen mit der Option -o gibt, um eine Datei zu schreiben, aber meine Frage betrifft den Befehl ohne diese Optionen.
Irgendwelche Vorschläge ?
Antworten:
Versuchen
Dies kombiniert den STDERR von "Zeit" und Ihren Befehl in time.txt
Oder verwenden
Dadurch wird STDERR aus "sleep" in die Datei "sleep.stderr" eingefügt, und nur STDERR aus "time" wird in "time.txt" gespeichert.
quelle
time
ausgewertet wird.{ time sleep 1; } 2>&1 | grep real
. Dies sendet stderr an stdout, das grep dann lesen kann.Wrap
time
und der Befehl, den Sie steuern, in Klammern.Zum Beispiel die folgenden Zeiten
ls
und schreibt das Ergebnisls
und die Ergebnisse des Timings inoutfile
:Oder wenn Sie die Ausgabe des Befehls von der erfassten Ausgabe trennen möchten von
time
:quelle
Einfach. Das GNU-
time
Dienstprogramm hat dafür eine Option.Sie müssen jedoch sicherstellen, dass Sie den integrierten Befehl Ihrer Shell nicht verwenden.
time
Zumindestbash
bietet der integrierte Befehl diese Option nicht! Aus diesem Grund müssen Sie den vollständigen Pfad destime
Dienstprogramms angeben:quelle
Wenn Sie sich für die Fehlerausgabe des Befehls interessieren, können Sie diese auf diese Weise trennen, während Sie weiterhin den integrierten Zeitbefehl verwenden.
oder
Wie Sie sehen, gehen die Fehler des Befehls in eine Datei (da
stderr
wird für verwendettime
).Leider können Sie es nicht an ein anderes Handle (wie
3>&2
) senden, da es außerhalb des Handles nicht mehr existiert{...}
Das heißt, wenn Sie die GNU-Zeit nutzen können, tun Sie einfach, was @Tim Ludwinski gesagt hat.
quelle
Da die Ausgabe des Befehls 'time' eine Fehlerausgabe ist, wäre eine Umleitung als Standardausgabe für die weitere Verarbeitung intuitiver.
quelle
Wenn Sie die GNU-Zeit anstelle der integrierten Bash verwenden, versuchen Sie es
(Hinweis: Die GNU-Zeitformate unterscheiden sich geringfügig von der integrierten Bash-Zeit.)
quelle
\time -o outfile command
(mit ``) zur Verwendung GNU statt eingebaut.in deinem Fall
dann
quelle
time
Binärdatei installiert haben,out
wird so etwas enthaltenbash: time: command not found
.Am Ende habe ich verwendet:
quelle
Dies hat den Vorteil, dass keine Sub-Shells erzeugt werden, und bei der endgültigen Pipeline wird der Stderr auf den tatsächlichen Stderr zurückgesetzt.
quelle
Wenn Sie stdout und stderr des ursprünglichen Prozesses nicht berühren möchten, können Sie stderr zu Dateideskriptor 3 und zurück umleiten:
Sie können dies für einen Wrapper (z. B. für Cronjobs) verwenden, um die Laufzeiten zu überwachen:
quelle
Wenn Sie verwenden
csh
, können Sie verwenden:Beispielsweise:
quelle