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.

  • # Anecdote vaguement hors sujet, mais pas que

    Posté par  . Évalué à 7.

    Hello,

    C'est l'histoire d'un logiciel de traitement de fichier RAW nommé Nikon Capture NX2 (CNX2) pour Mac dans ce cas précis.

    OK, c'est du soft proprio, mais bon, des fois, faut faire avec. Oui, je connais DarkTable et RawTherapee.

    Tout allait très bien sur mon MacBook Pro de 2013/2014, jusqu'au jour où, à force de faire le con, j'ai pété l'OS. Oui, un Mac OS, c'est fragile. Pas comme un windows, mais ça fini par se déglinguer aussi.
    Donc, j'ai refais une installation. Et là, plus moyen d'installer CNX2. Buh ??? Pourquoi ???

    Hypothèse : c'est à cause des versions de l'OS. Mon Mac m'a été livré en version 10.9.xx.
    CNX2 requiert un Mac OS en 10.411 ou 10.5.7 minimum.

    Donc au début, ça s'installe, normal.

    Ensuite, j'ai fait les mises à jour vers 10.10, 10.11, etc. Et la réinstallation de l'OS s'est faite avec la dernière version dispo.
    L'installation de CNX2 vérifie la version de l'OS avant d'aller plus loin, et donc : 10.10 < 10.5, refus d'installer.

    Si,si.

    Tout simplement parce que ces pignoufs ont codé leur versions en string et pas en numérique !
    Du coup, oui, "10.10" < "10.5" parce que "10.1" < "10.5".

    Ah ben bravo, 20/20 !

    Récemment, j'ai encore réinstallé l'OS, mais après avoir tout rincé de chez rincé. Faut reconnaître, c'est sympa de voir sa machine booter sans rien, et aller cherche le setup de l'OS sur le Net. Ça serait top de voir un PC vierge proposer l'installation de Linux, Windows ou macOS. Voire un triple boot … Mais passons.
    Bonne surprise cette fois, c'est l'OS d'origine qu'il me télécharge, en 10.9 donc.
    Et à nouveau, j'ai pu installer CNX2.

    CQFD ?

    Bref, tout ce blabla inintéressant pour dire : fézé gaffe avec les numéros de version, c'est un sujet qui paraît innocent, mais qui peut foutre une merde noire …

  • # 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.