Subtração de tempo de bash [duplicado]

0

Eu tenho duas variáveis de tempo no bash. Eu estou tentando encontrar uma maneira de obter a diferença de tempo entre os dois.

Sim, eu li muitos e muitos exemplos na net, mas eles não parecem ter uma solução "simples". Pelo contrário, parece que a aritmética do tempo em Bash foi uma "reflexão tardia".

Aqui estão alguns dos links que eu li: Link 1

Link 2

Link 3

Parece que não existe uma solução "elegante" para ela (minha opinião).

Então minhas variáveis são como as seguintes:

    TIME_START="date +%H:%M:%S //Start of script
    // The script
    TIME_END="date +%H:%M:%S //End of script

Então, estou tentando obter o tempo decorrido. O script pode levar até 3 horas para ser executado (interagindo com sensores e hardware etc.). A variável TIME_START é inserida no MySQL e posteriormente recuperada pelo Bash (quando o script termina) para fazer o cálculo do "tempo decorrido".

Eu li em algum lugar que o código a seguir funcionaria, mas não:

   diff=$(expr $TIME_END - $TIME_START)
   echo $diff

Alguma idéia?

Obrigado

Danny

    
por Danny 01.02.2017 / 14:23

2 respostas

3

Além de calcular você mesmo a duração do seu script (de preferência com os valores retornados de date +%s como Roman assinalou), você tem algumas outras opções.

Existe um comando chamado time . Você pode executar time some-script.sh e imprimirá o tempo que o script levou para ser executado no final. Veja a página de manual .

Você também pode usar $SECONDS no seu script bash. Ele manterá o número de segundos desde o início do processo. Então você pode echo It took $SECONDS no final do seu script ou assim. Pesquise $SECONDS na página do bash man .

E também há o times embutido no bash. Ele imprime informações semelhantes a time , mas para o próprio shell (o processo que o executa), não é fornecido nenhum comando (na verdade, ele não recebe argumentos). Novamente, veja man bash .

EDIT: Seu segundo link na verdade fornece uma solução que parece muito semelhante ao que você tenta e também usa a string de formato +% s mencionada por Roman.

    
por 01.02.2017 / 14:42
1

Você pode usar date +%s - armazenar segundos desde 1970-01-01 00:00:00 UTC

    
por 01.02.2017 / 14:28