Temporizador de contagem regressiva da linha de comando OSX bash

0

Encontrei aqui no superusuário o seguinte script de contagem regressiva que eu poderia incluir no meu .bash_profile:

function countdown(){  
   date1=$(('date +%s' + $1));   
   while [ "$date1" -ne 'date +%s' ]; do   
     echo -ne "$(date -u --date @$(($date1 - 'date +%s')) +%H:%M:%S)\r";  
     sleep 0.1  
  done  
}

Ele não funciona no OSX, eu entendo, por causa das diferenças no comando date . Outro usuário comentou como tal, mas o problema permaneceu sem solução nessa questão.

O mesmo problema (eu acho) também é discutido e resolvido aqui , mas não posso descobrir como modificar o script de contagem regressiva para utilizar esta solução.

    
por Tim 09.12.2014 / 12:20

1 resposta

2

Pessoalmente, eu refatorei isso um pouco para facilitar a leitura (ainda confiando na data do GNU)

function countdown(){  
    local now=$(date +%s)
    local end=$((now + $1))
    while (( now < end )); do   
        printf "%s\r" "$(date -u -d @$((end - now)) +%T)"  
        sleep 0.25  
        now=$(date +%s)
    done  
    echo
}

Mapeando as chamadas de data para a data do BSD do OSX ( página man aqui )

Parece a invocação da data do GNU

date -u -d @$((end - now)) +%T

traduz essa invocação de data do BSD

date -u -j -f %s $((end - now)) +%T

mas isso não foi testado.

    
por 09.12.2014 / 16:37