Forum général.cherche-logiciel Outil en ligne de commande pour comparer des versions de logiciels

Posté par  (site web personnel) . Licence CC By‑SA.
3
19
oct.
2019

Bonjour,

je cherche un outil qui aurait un comportement de ce type :

    $ outil 1.1 1.0
    1 # ou '>' ou 'sup', etc.

Mon besoin est de pouvoir faire des comparaisons facilement dans des scripts shell.

J'ai bien trouvé des bibliothèques qui le font. Par exemple :
- en javascript
- l'équivalent en python
- un autre en python

Il existe probablement des bibliothèques équivalentes quelque soit le langage.

Je suis aussi tombé sur les bouts de code shell qui répondent au besoin :
- sur Stackoverflow
- sur Stackexchange

J'utilise avec succès la solution de Stackoverflow mais j'aimerai un outil stupide, simple et qui ferait ça bien. Je n'ai pas trouvé les termes adaptés aux moteurs de recherche car je tombe soit sur les propositions précédentes, soit sur des suggestions basées sur diff (donc pas ce que je veux).

Je pourrais faire un peu de colle autour d'une des bibliothèques mais je me dis que je vais réinventer la roue car j'ai du mal à croire que ça n'existe pas : le besoin me semble assez courant pour que ce soit déjà écrit depuis longtemps.

  • # Commentaire supprimé

    Posté par  . Évalué à 7.

    Ce commentaire a été supprimé par l’équipe de modération.

  • # dpkg --compare-versions

    Posté par  (site web personnel) . Évalué à 7.

    Exemples :

    kibi@armor:~$ a=1.0; for b in 0.9 1.0 1.1; do dpkg --compare-versions $a '<<' $b; echo $?; done
    1
    1
    0
    kibi@armor:~$ a=1.0; for b in 0.9 1.0 1.1; do dpkg --compare-versions $a '<=' $b; echo $?; done
    1
    0
    0
    

    Extrait de la page de manuel :

           --compare-versions ver1 op ver2
                  Compare version numbers, where op is  a  binary  operator.  dpkg
                  returns  true  (0)  if the specified condition is satisfied, and
                  false (1) otherwise. There are two groups  of  operators,  which
                  differ  in  how they treat an empty ver1 or ver2. These treat an
                  empty version as earlier than any version: lt le eq  ne  ge  gt.
                  These  treat  an  empty version as later than any version: lt-nl
                  le-nl ge-nl gt-nl. These are  provided  only  for  compatibility
                  with  control  file  syntax:  <  <<  <=  =  >= >> >. The < and >
                  operators are obsolete and should not be used, due to  confusing
                  semantics. To illustrate: 0.1 < 0.1 evaluates to true.
    

    Debian Consultant @ DEBAMAX

  • # sort

    Posté par  . Évalué à 1.

    La commande sort dispose d'une option -V, --version-sort à cette fin.
    Ayant eu à me poser la même question, j'etais tombé sur ce lien: https://stackoverflow.com/questions/16989598/bash-comparing-version-numbers/24067243#24067243
    Avec la fonction qui va plutôt bien:
    function version_gt() { test "(printf '%s\n' "@" | sort -V | head -n 1)" != "$1"; }

    ++
    Gi)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.