2013-06-06 19 views
17

uso il/usr/bin/programma di tempo per misurare il tempo per un comando. con il parametro --format posso formattare l'output. ad es./usr/bin/tempo --format uscita tempo trascorso in millisecondi

/usr/bin/time -f "%e" ls 

c'è un modo per ottenere una maggiore precisione dei secondi trascorsi? o solo uscita millisecondi, non secondi?

Nel manuale di/usr/bin/time dice solo qualcosa sui secondi, ma forse c'è un modo e qualcuno può aiutarmi ... grazie!

EDIT: so sul comando bash "tempo", che utilizza il formato della variabile di ambiente "TIMEFORMAT". scusa, ma non voglio cambiare quell'env-var ... sembra rischioso per me, la soluzione dovrebbe essere qualcosa che non cambia affatto il sistema in esecuzione :)

+0

La pagina man non dice nulla a riguardo. Quindi presumo che non sia possibile usare una versione * invariata * del tempo. Dovrebbe essere possibile creare una patch per il formato di output, ma non so se sia possibile ottenere una maggiore precisione. – hek2mgl

+0

Solo indicando ai futuri lettori che la variabile 'TIMEFORMAT' è _only_ usata per controllare l'output del comando incorporato' time'. Non c'è alcun rischio associato a cambiarlo. –

risposta

26

Una possibilità è usare il comando date :

ts=$(date +%s%N) ; my_command ; tt=$((($(date +%s%N) - $ts)/1000000)) ; echo "Time taken: $tt milliseconds" 

%Nshould return nanoseconds, e 1 millisecondo è 1000000 nanosecondi, quindi per divisione restituirebbe il tempo di esecuzione my_command in millisecondi.

NOTA che il %Nis not supported on all systems, but most of them.

+0

eccellente, accettato! non pensavo alla data, ma è abbastanza buono! Per passare da nanosecondi a millisecondi devi dividere per 1000000, tuttavia: ts = $ (data +% s% N); dormire 1; tt = $ ((($ (data +% s% N) - $ ts)/1000000)); echo $ tt – Preexo

+0

a destra, è necessario dividere per '10^6' non' 10^3'. – devnull

+2

Per quelli su OSX senza la risoluzione temporale richiesta dalla data, è possibile sostituire la data nativa con gdate. Ad esempio: 'brew install coreutils' se necessario, quindi ' ts = $ (gdate +% s% N); dormire 1; tt = $ ((($ (gdate +% s% N) - $ ts)/1000000)); echo $ tt' [fonte] (http://apple.stackexchange.com/questions/135742/time-in-milliseconds-since-epoch-in-the-terminal) – snodnipper

5

Per comodità ho fatto la risposta di devnull in uno script (ho chiamato millisecondo-time).

#!/bin/bash 
ts=$(date +%s%N) ; [email protected] ; tt=$((($(date +%s%N) - $ts)/1000000)) ; echo "Time taken: $tt milliseconds" 

ho messo lo script in /usr/local/bin.
Conceduto diritti di esecuzione chmod +x /usr/local/bin/millisecond-time.
Ora posso usare in questo modo: millisecond-time my_command

P.S. Questo sarebbe un commento se avessi il rappresentante '.