É muito mais simples medir o tempo em segundos desde a época ( +%s
). Em seguida, o tempo decorrido em segundos encontrado apenas por subtração e conversão de segundos para minuto requer divisão por 60:
export etool_start=$(date +"%s")
do_stuff_with_etool
export etool_stop=$(date +"%s")
echo "elapsed time=$(( (etool_stop - etool_start)/60 )) minutes"
Se você precisa dos tempos em forma humana, pode convertê-los. Usando o GNU date
:
$ date -d "@$etool_start"
Tue Jul 5 21:30:19 PDT 2016
Ou:
$ date -d "@$etool_start" "+%Y%m%d%H%M"
201607052130
Mais sobre formatação
Para expressar o tempo decorrido em minutos em diferentes formatos, podemos usar printf
. Por exemplo, para produzir o tempo decorrido com quatro dígitos, podemos usar o formato %04i
:
$ printf '%04i\n' "$(( ($etool_stop - $etool_start)/60 ))"
0001
Um formato de %4i
nos daria um inteiro (i) em quatro caracteres. Se queremos zeros à esquerda em vez de espaços à esquerda, usamos %04i
.
Se quisermos o sinal oposto para o número:
$ printf '%05i\n' "$(( ($etool_start - $etool_stop)/60 ))"
-0035
Como o sinal de menos requer um caractere extra, aumentamos o espaço alocado de 4 para 5: %05i
.
Mais resolução
Porque o exemplo acima usou a aritmética de bash, que é somente inteiro. Se você quiser o tempo decorrido em minutos com frações de um minuto, outra ferramenta, como bc
, pode ser usada:
$ echo "($etool_stop - $etool_start)/60" | bc -l
1.38333333333333333333
O que são segundos desde a época?
De man date
, segundos desde a época, é definido por:
%s
seconds since 1970-01-01 00:00:00 UTC
Como é definido dessa maneira, o fuso horário local é irrelevante. Conseqüentemente, computá-lo no "fuso horário local" ou no horário universal, -u
, não faz diferença:
$ date +%s; date -u +%s
1467780345
1467780345