GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso testare il mio script Bash su versioni precedenti di Bash?

Anche se è bello sapere che è possibile compilare localmente versioni arbitrarie di bash (come discusso nell'altra mia risposta), in questi giorni c'è un'opzione molto più semplice:il Docker ufficiale bash immagini.

Testare uno script su più versioni di bash è spesso semplice come:

for v in 3 4 5; do # or whatever versions you're interested in
  docker run -v "$PWD:/mnt" "bash:$v" \
    bash /mnt/your_script.sh
done

Infine, tornando a questa domanda, è piuttosto semplice compilare (senza installare) le versioni di bash che ti interessano. Ecco come sto testando Bash 3.2.57:

$ mkdir ~/bash
$ cd ~/bash
$ wget http://ftp.gnu.org/gnu/bash/bash-3.2.57.tar.gz
$ tar xvzf bash-3.2.57.tar.gz
$ cd bash-3.2.57
$ ./configure
$ make
# if `make` fails due to yacc, run `sudo apt-get install byacc`
# No need to run `make install`
$ ./bash -version
GNU bash, version 3.2.57(1)-release (armv7l-unknown-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.

Ora hai un binario bash 3.2.57 che puoi eseguire, senza effettivamente "installarlo" o modificare il tuo normale ambiente.

Per eseguire uno script di shell su questa versione:

$ ./bash your_script.sh

Per inserire un prompt interattivo pulito:

$ env -i PATH="$PWD:$PATH" ./bash --noprofile --norc
bash-3.2$ bash -version
GNU bash, version 3.2.57(1)-release (armv7l-unknown-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
bash-3.2$ 

Usando env -i invece di chiamare semplicemente ./bash ti lascia direttamente con un ambiente per lo più vuoto (esegui env dall'interno del guscio per vedere cosa è ancora impostato). Aggiornamento del PATH consente chiamate a bash (ad es. bash -version ) per richiamare la shell bash locale, non l'installazione a livello di sistema (ma nota che questo inserisce l'intero PERCORSO). Aggiunta di --noprofile --norc evita di caricare il tuo .bashrc e script associati.

Se non vuoi ritirare nessun PATH modifiche, basta eseguire export PATH="$PWD:$PATH" una volta all'interno della subshell invece che come parte del env comando.

Ho un'immagine Docker (repo) che utilizza questi passaggi di installazione, se è utile per le persone a cui fare riferimento. Non suggerirei necessariamente di utilizzare questa immagine direttamente, ma puoi copiarla dallo script Dockerfile/install. Licenza MIT.


Dai un'occhiata a shenv:https://github.com/shenv/shenv. Proprio come rbenv, pyenv, goenv e altri, ma per le shell, ti consente di installare diverse versioni di Bash tra le altre (zsh, fish, yash, ecc.).

(Disclaimer:sono io che ho biforcato pyenv in shenv!)


Linux
  1. Uno script Bash può essere agganciato a un file?

  2. È possibile emulare versioni precedenti di Bash?

  3. Come dividere una stringa nello script Bash

  4. Come eseguire uno script bash?

  5. Come posso risolvere un nome host in un indirizzo IP in uno script Bash?

Come eseguire uno script Bash {7 metodi}

Come verificare se esiste un file o una directory in Bash

Come scrivere uno script Bash con esempi

Come utilizzare gli operatori di test di file Bash in Linux

Come eseguire uno script Bash

In che modo bash verifica "false"?