A comparação entre a data atual e a data de expiração, convertendo-as para segundos da época , é uma maneira boa de informar se o seu ticket expirou ou não. Contanto que você esteja obtendo CURREPOCH
e KRBEXPEPOCH
do mesmo host, você será capaz de dizer com boa precisão o estado atual do ticket (se você não os obtiver do mesmo host, lembre-se de que as datas obtidos podem ser relativos a diferentes fusos horários, e você precisaria mudá-los de acordo).
No entanto, como Kamil mencionou em seu comentário, a implementação que você usou em sua resposta tem um problema crucial: como você pode ver em man bash
, linha 1753, o ">" operador compara strings. Que, para sua aplicação, geralmente é uma coisa errada a se fazer. Para entender o porquê, tente isto:
if [[ "1000" > "200" ]]; then
echo "Statement is true"
else
echo "Statement is false"
fi
Como o número 1000 é, na verdade, maior que 200, você pode esperar que "Statement is true" seja impresso ... mas, em vez disso, você recebe "Statement is false". Isso é porque ">" age como um strcmp (), comparando caractere por caractere os códigos ASCII na string (por exemplo, a < b
seria verdadeiro).
O que você quer fazer é usar o operador "-gt", como Kamil sugeriu, ou compará-los usando a expansão aritmética de bash (que você pode usar em combinação com if
, conforme man bash
, linha 270) . Supondo que você tenha analisado a saída do comando klist corretamente, você pode fazer um destes:
if [[ "$CURREPOCH" -gt "$KRBEXPEPOCH" ]]; then echo "expired"; fi
if (( $CURREPOCH > $KRBEXPEPOCH )); then echo "expired"; fi