GNU/Linux >> Tutoriels Linux >  >> Linux

Comment détecter Bash>=4.0 ?

J'écris un script qui utilise read -i , il nécessite donc Bash 4.0 ou une version plus récente.

Malheureusement, au début de 2020, macOS est toujours livré avec Bash 3.x, et de nombreux utilisateurs de mon script utiliseront des Mac. Depuis qu'Apple a changé le shell par défaut en zsh, je n'ai aucun espoir qu'ils mettent à jour la version groupée.

En tant que tel, je souhaite que mon script détecte si Bash est suffisamment nouveau et se termine avec un message d'erreur utile qui invite l'utilisateur à effectuer la mise à niveau.

Je sais que je peux comparer ${BASH_VERSION} , mais il s'agit d'une chaîne au format non numérique et potentiellement peu fiable. Il semble fragile de faire des suppositions à ce sujet.

Quelle est la meilleure façon d'y parvenir ?

requireBash4() {
  if <something here>; then
    >&2 echo "Bash 4.0 or newer is required."
    >&2 echo "Once you're upgraded, re-run this script."
    exit 1
  fi
}

Réponse acceptée :

if ((BASH_VERSINFO >= 4)); then ...

Notez que BASH_VERSINFO est un tableau. Comme avec n'importe quel tableau dans bash, l'utiliser comme variable simple fait référence à son 0-ème élément. Vous pouvez également utiliser ((BASH_VERSINFO[0] >= 4)) si vous le trouvez plus clair.

Et oui, cette variable et cette syntaxe sont supportées depuis au moins bash 2.0.

BASH_VERSINFO

Une variable de tableau en lecture seule dont les membres contiennent des informations de version
pour cette instance de bash. Les valeurs attribuées aux membres du tableau
sont les suivantes :

BASH_VERSINFO[0] Le numéro de version majeure (la release).
BASH_VERSINFO[1] Le numéro de version mineure (la version).
BASH_VERSINFO[2] Le niveau de correctif.
BASH_VERSINFO[3] La version de compilation.
BASH_VERSINFO[4] Le statut de la version (par exemple, beta1).
BASH_VERSINFO[5] La valeur de MACHTYPE .


Linux
  1. Comment utiliser les commandes d'historique de Bash

  2. Comment changer de version de PHP

  3. Comment déboguer un script bash ?

  4. Comment comparer deux chaînes au format de version séparées par des points dans Bash ?

  5. Comment détecter la disponibilité de l'interface graphique dans Bash/Shell ?

Comment vérifier la version de CentOS

Comment vérifier la version d'Ubuntu

Comment vérifier la version de Python

Comment vérifier la version Java

Comment vérifier la version d'OpenGL ?

Comment exécuter un script bash