obtém o tempo decorrido no bash

2

Eu gostaria de fazer o seguinte em um ponto de um script:

start_time=date

e isso após um processo ou processos serem executados:

end_time=date

e faça isso:

elapsed=$end_time-$start_time
echo "Total of $elapsed seconds elapsed for process"

Como eu faria isso?

    
por Oliver Williams 05.10.2016 / 02:09

3 respostas

6

Use o tempo desde a época para identificar facilmente um período de tempo em um script

man date
%s     seconds since 1970-01-01 00:00:00 UTC
%N     nanoseconds (000000000..999999999)

.

start_time="$(date -u +%s)"
sleep 5
end_time="$(date -u +%s)"

elapsed="$(($end_time-$start_time))"
echo "Total of $elapsed seconds elapsed for process"

 Total of 5 seconds elapsed for process

O Bash não suporta números de ponto flutuante, então você precisará usar uma ferramenta externa como bc para comparar tempos como 1475705058.042270582-1475705053.040524971

start_time="$(date -u +%s.%N)"
sleep 5
end_time="$(date -u +%s.%N)"

elapsed="$(bc <<<"$end_time-$start_time")"
echo "Total of $elapsed seconds elapsed for process"

 Total of 5.001884264 seconds elapsed for process
    
por 05.10.2016 / 02:37
8

o bash tem uma variável de temporizador incorporada

start=$SECONDS
# do stuff
end=$SECONDS
duration=$(( end - start ))
echo "stuff took $duration seconds to complete"
    
por 05.10.2016 / 03:05
1

@jasonwryan já sugeriu isso, mas vou colocá-lo como uma resposta, pois é também o meu go-to quando quero tempo de um script. Para cronometrar o myscript , simplesmente use:

time myscript
    
por 05.10.2016 / 06:05

Tags