GNU/Linux >> Linux Esercitazione >  >> Linux

Come rilevare Bash>=4.0?

Sto scrivendo uno script che utilizza read -i , quindi richiede Bash 4.0 o versioni successive.

Sfortunatamente, all'inizio del 2020, macOS viene fornito ancora con Bash 3.x e molti utenti del mio script utilizzeranno i Mac. Dal momento che Apple ha cambiato la shell predefinita in zsh, non ho speranza che aggiorneranno la versione in bundle.

Pertanto, voglio che il mio script rilevi se Bash è abbastanza nuovo e esca con un utile messaggio di errore che indirizza l'utente all'aggiornamento.

So di poter confrontare ${BASH_VERSION} , ma si tratta di una stringa con un formato non numerico, potenzialmente inaffidabile. È fragile fare supposizioni al riguardo.

Qual è il modo migliore per farlo?

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
}

Risposta accettata:

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

Nota che BASH_VERSINFO è una matrice. Come con qualsiasi array in bash, usarlo come variabile semplice si riferisce al suo 0-esimo elemento. Puoi anche usare ((BASH_VERSINFO[0] >= 4)) se lo trovi più chiaro.

E sì, questa variabile e sintassi sono supportate almeno da bash 2.0.

BASH_VERSINFO

Una variabile di matrice di sola lettura i cui membri contengono informazioni sulla versione
per questa istanza di bash. I valori assegnati ai membri dell'array
sono i seguenti:

BASH_VERSINFO[0] Il numero di versione principale (la versione).
BASH_VERSINFO[1] Il numero di versione secondaria (la versione).
BASH_VERSINFO[2] Il livello della patch.
BASH_VERSINFO[3] La versione build.
BASH_VERSINFO[4] Lo stato del rilascio (ad es. beta1).
BASH_VERSINFO[5] Il valore di MACHTYPE .


Linux
  1. Come eseguire il debug di uno script Bash?

  2. Come controllare la versione di CentOS

  3. Come confrontare due stringhe nel formato della versione separata da punti in Bash?

  4. Come rilevare se un file ha una BOM UTF-8 in Bash?

  5. Come rilevare la disponibilità della GUI in Bash/Shell?

Come controllare la versione di CentOS

Come controllare la versione di Ubuntu

Come controllare la versione di Python

Come controllare la versione Java

Come controllare la versione OpenGL?

Come eseguire uno script Bash