bash: atualiza o apt-get somente se o cache do apt for anterior a 10 minutos

3

Estou tentando, com um script, testar se o cache do apt tem mais de 10 minutos de idade

if [ "($(date +%s) - $(stat -c %Z /var/lib/apt/periodic/update-success-stamp)) -ge 600000" ]; then
echo true
fi

Mas mesmo quando o cache é de 1 min, esse retorno é verdadeiro. O que estou fazendo errado?

    
por Dremor 24.06.2014 / 15:15

1 resposta

5

O que você está fazendo não é subtração, mas sim colocar um símbolo "-" entre dois valores. Você pode ver isso tentando.

echo "($(date +%s) - $(stat -c %Z /var/lib/apt/periodic/update-success-stamp))"

que dá no meu caso

(1403616665 - 1403583368)

A afirmação correta deve ser

echo "$[$(date +%s) - $(stat -c %Z /var/lib/apt/periodic/update-success-stamp)]"

que fornece corretamente

33297

Também devido às aspas mais externas, a instrução "($(date +%s) - $(stat -c %Z /var/lib/apt/periodic/update-success-stamp)) -ge 600000" é considerada como o primeiro valor, que é comparado a nothing , e é por isso que ele fornece sempre um resultado verdadeiro.

Arredondando tudo isso, o script seria

if [ "$[$(date +%s) - $(stat -c %Z /var/lib/apt/periodic/update-success-stamp)]" -ge 600000 ]; then
echo true
fi
    
por Registered User 24.06.2014 / 15:35

Tags