Medindo o tempo em um script

8

Este tópico mostra como medir o tempo necessário para executar um script. No meu caso, estou interessado em medir o tempo entre dois pontos em um script . Aqui está um exemplo de como eu gostaria de usar isso:

start_measuring_time
Line 1
Line 2
..
Line N
stop_measuring_time
show_elapsed_time

Gostaria que o tempo exibido fosse legível por humanos (segundos, minutos, horas, dias etc.), se possível. Alguma idéia de como fazer isso?

Amelio Vazquez-Reina
fonte

Respostas:

7

Você pode usar o dateutil:

#!/bin/bash

start_measuring_time() {
  read s1 s2 < <(date +'%s %N')
}

stop_measuring_time() {
  read e1 e2 < <(date +'%s %N')
}

show_elapsed_time() {
  echo "$((e1-s1)) seconds, $((e2-s2)) nanoseconds"
}

start_measuring_time
sleep 2
stop_measuring_time
show_elapsed_time
enzotib
fonte
Isso produzirá erros: os horários de início e término precisam ser interpretados como segundos + nanossegundos juntos , não separadamente - você pode obter valores como valores negativos.
rozcietrzewiacz
1
Veja minha resposta a esta pergunta para uma maneira de resolver isso.
rozcietrzewiacz
Eu tive que downvote desde a sua resposta não comletely correta, corrigi-lo dá valores negativos às vezes, mas na sua pergunta porque você não está colocando eco antes Tend-Tstart e depois$(
Munish
11

Você poderia apenas usar time:

time (
Line 1
Line 2
..
Line N
)

Acho que a saída do tempo é legível por humanos, mas se o seu script medir em dias, etc., verifique as man timeopções de formatação para a saída.

frabjous
fonte
Obrigado @frabjous! Acho que vou aceitar a resposta do @ enzotib porque me permite medir o tempo nos fluxos de controle geral (ou seja, não apenas nos fluxos lineares).
Amelio Vazquez-Reina
1

Exemplo para experimentar timerscript.sh:

#!/bin/bash

#timing in minutes with %m
start=`date +%m`
echo 'Start:' $start
#do something e.g. wait for 1.30 minutes 
sleep 90

`end=`date +%m`
echo 'End: '$end
echo 'runtime: '$runtime
Jorduino
fonte