Necesitaba un temporizador que comenzará al principio del guión y se detiene al final.
time yourprogram.sh
que explicó @Marius Cotofana
Necesitaba un temporizador que comenzará al principio del guión y se detiene al final.
time yourprogram.sh
que explicó @Marius Cotofana
Respuestas:
Si desea la duración en segundos, en la parte superior use
start=$SECONDS
Y al final
duration=$(( SECONDS - start ))
Podrías usar el time
comando incorporado de Linux . Desde la página del manual:
comando de tiempo [argumentos]
time determina qué información mostrar sobre los recursos utilizados por el COMANDO desde la cadena FORMAT. Si no se especifica ningún formato en la línea de comando, pero se establece la variable de entorno TIME, su valor se utiliza como formato.
Para cronometrar el cleanup.sh
guión, use:
$ time cleanup.sh
time
que está usando. hackernoon.com/…
Me doy cuenta de que esta es una pregunta bastante antigua, pero esta es la forma en que lo hago para cualquier cosa cuando quiero / necesito saber cuánto tiempo tardó en ejecutarse.
Bash tiene un temporizador de segundos incorporado en forma de una variable interna llamada SECONDS
(ver: aquí para otras variables internas)
Ponga SECONDS=0
antes de lo que sea que esté verificando el tiempo de ejecución. Debe estar después de cualquier entrada del usuario para obtener un buen resultado, por lo que si solicita información, póngala después de la (s) solicitud (es).
Luego, pon esto al final de lo que estás comprobando:
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
Si solo desea saber el tiempo en segundos, puede simplificar lo anterior para:
echo "Completed in $SECONDS seconds"
Como ejemplo:
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"
(limitado a menos de 24 h, pero también puede adaptarse para agregar días)
#!/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 hace una solución inteligente para esta respuesta, solo recomiendo usar el nativo en su $SECONDS
lugar para crear uno nuevo
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}'
El propósito de printf
y la división es convertir los segundos transcurridos a las correspondientes unidades Horas, Mins, Secs, respectivamente.
time
comando (time ./script.sh), para imprimir el tiempo actual use eldate
comando, etc.