Construir uma função de tempo decorrido [fechado]

0

Eu quero construir uma função de lapso de tempo dentro de um script para imprimir essa hora a cada segundo, por exemplo, a saída deve ficar como abaixo:

finding files inside a directory
time elapse HH:MM:SS
  • HH é hora
  • MM é minuto
  • SS é o segundo

e o tempo de linha transcorre, etc. continua a contar 1 segundo no ecrã sem imprimir uma nova linha depois que o script terminar, a execução da função será interrompida.

    
por ammar 24.07.2018 / 10:53

2 respostas

1

Gostaria de escrever uma função de cronômetro, como a que eu publiquei aqui , e chame-a dizendo para assistir ao ID do processo do comando que você está executando (observe que isso pressupõe o GNU date ):

#!/bin/bash

stopwatch(){
    date1='date +%s'; 
    while kill -0 $1 2>/dev/null; do 
        printf "Elapsed time: %s\r" "$(date -u --date @$(('date +%s' - $date1)) +%H:%M:%S)";
        sleep 0.1
    done
}

find /path/to/dir > output 2> error  &
stopwatch $!

Note que esta abordagem significa que se você matar o script com Ctrl + C , o processo find continuará sendo executado em segundo plano. A solução de Stéphane é uma ideia melhor.

    
por 24.07.2018 / 11:25
1

Com o shell bash , você pode fazer algo como:

elapse() (
  SECONDS=0
  while read -t1; (($? > 128)); do
    TZ=UTC0 printf >&2 '\rtime elapse %(%T)T' "$SECONDS"
  done
  echo >&2
)

{ long-running-command 4>&1 >&3 3>&- | elapse; } 3>&1
    
por 24.07.2018 / 11:22