Avevo bisogno di un timer che inizierà all'inizio della sceneggiatura e si fermerà alla fine.
time yourprogram.sh, che ha spiegato @Marius Cotofana
Avevo bisogno di un timer che inizierà all'inizio della sceneggiatura e si fermerà alla fine.
time yourprogram.sh, che ha spiegato @Marius Cotofana
Risposte:
Se si desidera la durata in secondi, nella parte superiore utilizzare
start=$SECONDS
e alla fine
duration=$(( SECONDS - start ))
È possibile utilizzare il timecomando integrato di Linux . Dalla pagina man:
time COMMAND [argomenti]
time determina quali informazioni visualizzare sulle risorse utilizzate dal COMANDO dalla stringa FORMAT. Se nella riga di comando non viene specificato alcun formato, ma viene impostata la variabile d'ambiente TIME, il suo valore viene utilizzato come formato.
Per cronometrare lo cleanup.shscript, utilizzare:
$ time cleanup.sh
timeche stai usando. hackernoon.com/…
Mi rendo conto che questa è una domanda piuttosto vecchia, ma questo è il modo in cui lo faccio per qualsiasi cosa, quando voglio / ho bisogno di sapere quanto tempo impiega a funzionare qualcosa.
Bash ha un timer di secondi incorporato sotto forma di una variabile interna denominata SECONDS(vedi: qui per altre variabili interne)
Metti SECONDS=0prima di tutto ciò che stai controllando il tempo di esecuzione di. Deve essere dopo qualsiasi input dell'utente per ottenere un buon risultato, quindi se stai richiedendo informazioni, inseriscile dopo il / i prompt.
Quindi, inseriscilo alla fine di ciò che stai controllando:
if (( $SECONDS > 3600 )) ; then
let "hours=SECONDS/3600"
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)"
elif (( $SECONDS > 60 )) ; then
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $minutes minute(s) and $seconds second(s)"
else
echo "Completed in $SECONDS seconds"
fi
Se vuoi solo conoscere il tempo in secondi, puoi semplificare quanto sopra per:
echo "Completed in $SECONDS seconds"
Come esempio:
read -rp "What's your name? " "name"
SECONDS=0
echo "Hello, $name"
if (( $SECONDS > 3600 )) ; then
let "hours=SECONDS/3600"
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)"
elif (( $SECONDS > 60 )) ; then
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $minutes minute(s) and $seconds second(s)"
else
echo "Completed in $SECONDS seconds"
fi
date +%T -d "1/1 + $SECONDS sec"(limitato a meno di 24 ore, ma è anche possibile adattarsi per aggiungere giorni)
#!/bin/bash
start=$(date +%s)
#
# do something
sleep 10
#
#
end=$(date +%s)
seconds=$(echo "$end - $start" | bc)
echo $seconds' sec'
echo 'Formatted:'
awk -v t=$seconds 'BEGIN{t=int(t*1000); printf "%d:%02d:%02d\n", t/3600000, t/60000%60, t/1000%60}'
@anask fare una soluzione intelligente per questa risposta, solo io consiglio di usare il nativo $SECONDSinvece di crearne uno nuovo
awk -v t=$SECONDS 'BEGIN{t=int(t*1000); printf "Elapsed Time (HH:MM:SS): %d:%02d:%02d\n", t/3600000, t/60000%60, t/1000%60}'
Lo scopo della printfdivisione e è quello di convertire i secondi trascorsi nelle corrispondenti unità Ore, Minuti, Secondi, rispettivamente.
timecomando (time ./script.sh), per stampare il tempo corrente usare ildatecomando e così via.