Supposons que je veuille comparer la gcc
version pour voir si la version minimale du système est installée ou non.
Pour vérifier la gcc
version, j'ai exécuté ce qui suit
gcc --version | head -n1 | cut -d" " -f4
La sortie était
4.8.5
J'ai donc écrit une simple if
déclaration pour comparer cette version avec une autre valeur
if [ "$(gcc --version | head -n1 | cut -d" " -f4)" -lt 5.0.0 ]; then
echo "Less than 5.0.0"
else
echo "Greater than 5.0.0"
fi
Mais cela jette une erreur:
[: integer expression expected: 4.8.5
J'ai compris mon erreur que j'utilisais des chaînes pour comparer et l' -lt
entier requis. Alors, existe-t-il un autre moyen de comparer les versions?
shell-script
test
version
numeric-data
Abhimanyu saharien
la source
la source
gcc -dumpversion
Réponses:
Je ne sais pas si c'est beau, mais cela fonctionne pour tous les formats de version que je connais.
( Remarque: meilleure version par l'utilisateur 'wildcard': https://unix.stackexchange.com/users/135943/wildcard , condition supplémentaire supprimée)
la source
printf "$requiredver\n$currentver"
parprintf '%s\n' "$requiredver" "$currentver"
.-V
est une extension GNUsort(1)
donc cette solution n'est pas portable.sort -n
fonctionne à peu près de la même manière dans le cas des versions numériques.Ici, je donne une solution pour comparer les versions du noyau Unix. Et cela devrait fonctionner pour d'autres comme gcc. Je ne me soucie que des 2 premiers numéros de version, mais vous pouvez ajouter une autre couche de logique. C'est un liner et je l'ai écrit en plusieurs lignes pour comprendre.
Vous pouvez le modifier et l'utiliser pour vérifier la version de gcc.
la source
Nous faisions beaucoup de vérification de version dans un makefile GNU. Nous avons bombardé les installations de makefile. Nous avons dû détecter les vieux Binutils et les compilateurs de buggy et les contourner à la volée.
Le modèle que nous avons utilisé était:
la source
Version plus courte:
la source
printf '%s\n'
est assez bon;printf
répétera la chaîne de format selon les besoins.printf
répète la chaîne de format mais moi la syntaxe (manque de!) Pour cela est IMHO obscure; donc je l'utilise uniquement lorsque cela est nécessaire = lorsque le nombre d'arguments est grand ou variable.Le crédit va à @Shellman
la source