Os números de versão são realmente difíceis de comparar, já que muitas vezes não são comparações matemáticas padrão (esta, por exemplo, tem dois pontos decimais que fazem bc
vomitar).
Portanto, recorro a uma opção menos conhecida em sort
que pode ser usada para classificar strings de versão. Considere o seguinte:
$ echo -e "v0.1.5\nv0.1.6-2-p343h3d3" | sort -V
v0.1.5
v0.1.6-2-p343h3d3
oli@bert:~$ echo -e "v0.1.5\nv0.1.4-2-p343h3d3" | sort -V
v0.1.4-2-p343h3d3
v0.1.5
Isso basicamente significa que podemos classificar as versões para que a última seja na última linha. Tudo o que temos que fazer é uma comparação de strings contra a última linha, dentro de um if
, ou um atalho-if:
[[ $(echo -e "v0.1.5\nv0.1.4-2-p343h3d3" | sort -V | tail -1) != "v0.1.5" ]] && echo NEWER
Brinque com a string v0.1.4-2-p343h3d3
. Se você colocá-lo em 0.1.6
, ele irá ecoar.
Agora, para trazer tudo isso de volta ao seu comando:
[[ $(echo -e "v0.1.5\n$(${HOME}/temp/.git describe --always --tags HEAD)" | sort -V | tail -1) != "v0.1.5" ]] && echo NEWER
Ou você pode dividi-lo para facilitar a leitura:
THRESHOLD="v0.1.5"
VERSION=$(${HOME}/temp/.git describe --always --tags HEAD)
if [[ $(echo -e "$THRESHOLD\n$VERSION" | sort -V | tail -1) != "$THRESHOLD" ]]; then
echo GREATER
fi