Estou escrevendo um script em bash para calcular o tempo decorrido para a execução dos meus comandos, considere:
STARTTIME=$(date +%s)
#command block that takes time to complete...
#........
ENDTIME=$(date +%s)
echo "It takes $($ENDTIME - $STARTTIME) seconds to complete this task..."
Acho que minha lógica está correta, mas acabo com a seguinte impressão:
"Leva segundos para concluir esta tarefa ..."
Algo errado com a minha avaliação de cordas?
Eu acredito que as variáveis do bash não têm tipo, eu adoraria se houvesse um método "string to integer" no bash.
Acho muito claro usar a variável interna "$ SECONDS"
SECONDS=0 ; sleep 10 ; echo $SECONDS
fonte
$SECONDS
realmente funciona para / bin / bash. Não funciona para / bin / dash, o shell padrão no Debian e Ubuntu.sleep 0.5
em acima, o resultado às vezes é 0, às vezes 1 (pelo menos pelo Bash 5.0.3).Você está tentando executar o número no
ENDTIME
como um comando. Você também deve ver um erro como1370306857: command not found
. Em vez disso, use a expansão aritmética :Você também pode salvar os comandos em um script separado,
commands.sh
, e usar o comando time:fonte
Você pode usar a
time
palavra-chave do Bash aqui com uma string de formato apropriadaAqui está o que a referência diz sobre
TIMEFORMAT
:fonte
Para números maiores, podemos imprimir em um formato mais legível. O exemplo abaixo faz o mesmo que outro, mas também imprime no formato "humano":
Teste simples:
Resultado:
Para usar em um script conforme descrito em outras postagens (capture o ponto inicial e chame a função com o tempo de término:
fonte
Experimente o seguinte código:
fonte
Esta é uma alternativa de uma linha para a função de Mike Q:
fonte
SECONDS
a resposta de Lon Kaut e ter em mente que $ / $ {} é desnecessário em variáveis aritméticas torna o código tão curto que poderia até ser usado em linha:echo "$((SECONDS/3600))h $(((SECONDS/60)%60))m $((SECONDS%60))s"
tente usar o tempo com a opção de segundos decorridos:
/usr/bin/time -f%e sleep 1
sob bash.ou
\time -f%e sleep 1
em bash interativo.veja a página de manual do tempo:
e
fonte
/bin/time
não vai funcionar aqui: OP menciona um bloco . Então, realmente precisamos da palavra-chavetime
aqui.fonte
fonte