2009-05-13 13 views

risposta

16

Vuoi inserire questo codice nel tuo script o farlo dal processo che avvia lo script?

Per quest'ultimo, è possibile utilizzare la parola riservata "ora" e quindi analizzare ciò che restituisce per ottenere quanto tempo impiega uno script.

Se si desidera eseguire questa operazione da uno script, è possibile impostare la variabile SECONDS su zero e ogni volta che si fa riferimento a tale variabile verrà aggiornato per il numero di secondi trascorsi. Quindi, puoi mettere "SECONDS = 0" all'inizio del tuo script, e ogni volta che hai bisogno del tempo trascorso sarà nella variabile SECONDS.

È inoltre possibile utilizzare il trucco $ SECONDI sulla riga di comando, così, ad esempio:

$ SECONDS=0; sleep 5 ; echo "that took approximately $SECONDS seconds" 

La parola riservata di tempo e la variabile SECONDI sono entrambi documentate nella pagina man di bash.

+4

bash è una fonte inesauribile di inganni e sorprese – flybywire

7

Questo funziona in Bash, e anche Zsh:

# Set time format to seconds 
TIMEFORMAT=%R 
# Time a process 
PROC_TIME=$(time (insert command here >/dev/null 2>&1) 2>&1) 
echo $PROC_TIME 
  • I primi due reindirizzamenti nascondono uscita del vostro processo ">/dev/null 2> & 1"
  • L'ultima reindirizzamento è necessario perché "time" stampa l'ora su stderr
+0

'rtime() {TIMEFORMAT =% R; echo $ (time ("$ 1" 2> & 1) 2> & 1)} '.... e successivi ...' echo $ SECONDS' - Questo è magic ™ ... _e lo uso ** ALL ** the tempo_. –

-1

Utilizzare il comando tempo. Si noti che la versione di tempo di bash non è la stessa di/usr/bin/time. Quindi avresti qualcosa tipo:

TIME=`/usr/bin/time --format="%e" your_command_here >/dev/null` 

Il formato estrae semplicemente il valore di tempo "reale". Dovresti convertirlo da una stringa se vuoi fare qualcosa di più che visualizzarlo.

Se si desidera esportare la stringa, utilizzare export.

+0

La variabile '$ TIME' è effettivamente usata da'/usr/bin/time', quindi sarebbe meglio scegliere un nome di variabile diverso. Un modo per evitare tali conflitti è non usare nomi che siano tutti maiuscoli per le proprie variabili. –

0

Utilizzando GNU time,

\time -p -o time.log $COMMAND 

e poi leggere time.log.

(Utilizzare \time o command time, altrimenti userete di Bash time built-in, che non supporta queste opzioni.)

Ciò funzionerà anche quando $COMMAND stampe a STDERR (che sarebbe confondere Oli di risposta), e mantiene stdout/stderr (la risposta di Farzy no).

-o ... dice time di inviare il suo output a un file piuttosto che a stderr (come di default), e -p genera il tradizionale

real 0.00 
user 0.00 
sys 0.00 

piuttosto che di default di GNU time di

0.00user 0.00system 0:00.01elapsed 8%CPU (0avgtext+0avgdata 0maxresident)k 
80inputs+0outputs (1major+188minor)pagefaults 0swaps 
Problemi correlati