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.