Eu tenho um código simples para garantir que um script leve pelo menos x segundos (500 aqui) no Ubuntu
t1=$(date +%s)
# script is here
t2=$(date +%s)
let "t = 500 - $t2 + $t1"
(( t = t>0 ? t : 1 ))
sleep $t
O código funciona perfeitamente, mas acredito que minha codificação não seja eficiente, e essas três linhas
t2=$(date +%s)
let "t = 500 - $t2 + $t1"
(( t = t>0 ? t : 1 ))
deve ser expresso em uma única linha. Minha dúvida é como melhorar o código.
Qual é o seu script, não é portátil (já que você está usando
let
e(( .. ))
), confuso (já que você está usando amboslet
e(( .. ))
), carece de documentação (não há comentários e os nomes das variáveis não são descritivos) e marginalmente unsafe (já que você não citou a expansão de$t
).Se você quiser uma reescrita, aqui está o meu:
Aqui está como eu faria isso usando
bash
um parâmetro especialSECONDS
:Normalmente
SECONDS
retorna o tempo (em segundos) desde que o script foi iniciado, mas pode-se atribuir qualquer valor para (re)definir o cronômetro.