2009-11-01 11 views

risposta

53

Non dimenticate che c'è una differenza tra di bash integrato time (che dovrebbe essere chiamato per impostazione predefinita quando si do time command) e /usr/bin/time (che dovrebbe richiedere di chiamarlo per il suo percorso completo).

L'integrato time stampa sempre su stderr, ma /usr/bin/time consente di inviare l'output del tempo a un file specifico, in modo da non interferire con il flusso stderr del comando eseguito. Inoltre, il formato /usr/bin/time s' è configurabile sulla linea di comando o dalla variabile ambiente TIME, mentre bash builtin formato time è solo configurato dalla variabile TIMEFORMAT ambiente.

$ time factor 1234567889234567891 # builtin 
1234567889234567891: 142662263 8653780357 

real 0m3.194s 
user 0m1.596s 
sys 0m0.004s 
$ /usr/bin/time factor 1234567889234567891 
1234567889234567891: 142662263 8653780357 
1.54user 0.00system 0:02.69elapsed 57%CPU (0avgtext+0avgdata 0maxresident)k 
0inputs+0outputs (0major+215minor)pagefaults 0swaps 
$ /usr/bin/time -o timed factor 1234567889234567891 # log to file `timed` 
1234567889234567891: 142662263 8653780357 
$ cat timed 
1.56user 0.02system 0:02.49elapsed 63%CPU (0avgtext+0avgdata 0maxresident)k 
0inputs+0outputs (0major+217minor)pagefaults 0swaps 
+0

Da "man bash": "La variabile TIMEFORMAT può essere impostata su una stringa di formato che specifica come devono essere visualizzate le informazioni di temporizzazione" –

+0

Oops - I * pensato * c'era un modo per formattarlo, ma l'ho perso in 'help time' perché ho solo guardato oltre e ho pensato che fosse un argomento da linea di comando. Aggiornerò la risposta –

+0

-1 Questo non sembra rispondere alla domanda affatto. –

21
[email protected]:~# time [command] 

Si distingue anche tra tempo reale utilizzato e ora del sistema utilizzato.

+0

che è certamente la risposta di base - ma ci sono alcune complicazioni se si desidera visualizzare l'output di errore del comando e tuttavia inviare le informazioni di temporizzazione sullo standard output come la questione fa. Il comando time scrive su stderr. Quello che suggerisci è probabilmente abbastanza preciso, quindi il mio +1. –

+2

'time' scrive sul tty, non su stderr. Credo che peggiori le cose. – mob

90

time è un comando incorporato nella maggior parte delle shell che scrive le informazioni sul tempo di esecuzione sul tty.

Si potrebbe anche provare qualcosa di simile

start_time=`date +%s` 
<command-to-execute> 
end_time=`date +%s` 
echo execution time was `expr $end_time - $start_time` s. 

O in bash:

start_time=`date +%s` 
<command-to-execute> && echo run time is $(expr `date +%s` - $start_time) s 
+6

eccellente, più flessibile della risposta accettata – maazza

+0

concordata con Maaza, questa flessibilità mi ha permesso di misurare il tempo di un intero set di comandi. – Nath

+0

È possibile applicare gli aspetti di linux attorno a qualsiasi comando linux per calcolare l'esecuzione –

2

In zsh è possibile utilizzare

=time ... 

In bash o zsh è possibile utilizzare

command time ... 

Questi (con meccanismi diversi) forzare un comando esterno da utilizzare.

6

aggiunta alla risposta di @ mob:

Aggiunta %N-date +%s ci dà nanosecondo precisione:

start=`date +%s%N`;<command>;end=`date +%s%N`;echo `expr $end - $start` 
4

Se sto iniziando un processo di lunga esecuzione come una copia o hash e voglio sapere dopo quanto tempo ha preso, io faccio solo questo:

$ date; sha1sum reallybigfile.txt; date 

che si tradurrà nella seguente output:

0.123.516,410617 millions
Tue Jun 2 21:16:03 PDT 2015 
5089a8e475cc41b2672982f690e5221469390bc0 reallybigfile.txt 
Tue Jun 2 21:33:54 PDT 2015 

Concesso, come implementato qui non è molto preciso e non calcola il tempo trascorso. Ma è sporcizia semplice ea volte tutto ciò di cui hai bisogno.

6

Per una misurazione delta linea per linea, provare gnonom.

È un'utilità della riga di comando, un po 'come il comando di moreutils, per anteporre le informazioni di timestamp allo standard output di un altro comando.Utile per processi a lungo termine in cui ti piacerebbe avere una registrazione storica di ciò che ci vuole così tanto tempo.

Piping di qualsiasi cosa a gnomon antepone un timestamp a ciascuna riga, indicando per quanto tempo quella linea era l'ultima riga nel buffer, ovvero quanto tempo impiegava la riga successiva a comparire. Per impostazione predefinita, gnomon mostrerà i secondi trascorsi tra ogni linea, ma ciò è configurabile.

gnomon demo

Problemi correlati