Bash time
builtin ist ein bisschen schwierig zu erfassen, weil sie eine besondere Behandlung hat, so dass sie die Bearbeitungszeit für eine ganze Pipeline wie time ls -l | sort | uniq
und nicht nur die Bearbeitungszeit für nur den ls -l
Befehl in meinem Beispiel zurückkehren kann.
Der beste Weg, nur die Ausgabe von Zeit zu erfassen ist die folgende Umleitungstechnik:
exec 3>&1 4>&2
foo=$({ time some_command 1>&3 2>&4; } 2>&1) # change some_command
exec 3>&- 4>&-
An diesem Punkt, wenn Sie echo "$foo"
sind Sie würden etwas in der Größenordnung von
real 0m0.013s
user 0m0.004s
sys 0m0.007s
sehen
Nun, um nur den 004
Teil davon zu bekommen, haben Sie ziemlich viele Optionen: sed, awk oder straight bash, um die Top 3 zu nennen. Mein persönlicher Favorit wäre awk und würde irgendwie aussehen Hing wie folgt aus:
foo=$({ time some_command 1>&3 2>&4;} 2>&1 | awk -F'[s.]' '/user/{print $3}')
Jetzt würde, wenn Sie echo "$foo"
waren Sie sehen gerade 004
als
Anstatt Rohrleitungen zu 'tr' gewünscht, sobald Sie' foo = „0.00X“ haben 'Sie verwenden konnte diese Parameter Erweiterung und Ausgabe '$ {foo # *.}', Um nur '00X' zu bekommen. Wie auch immer, guten Ruf auf die Variable TIMEFORMAT, noch nie zuvor gesehen. – SiegeX
Mann, mein Unix Flash-Licht-Fu ist nie hell genug.Es gibt immer eine erstaunlich einfache und sehr spezifische Art, in einer dunklen Ecke der Dokumentation etwas Cooles zu tun. +1 für 'TIMEFORMAT' - viel besser als das (wenn auch einfache) sed-Skript, das ich machen würde. – Jamie