GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je tester mon script Bash sur des versions plus anciennes de Bash ?

Bien qu'il soit bon de savoir qu'il est possible de compiler localement des versions arbitraires de bash (comme indiqué dans mon autre réponse), il existe aujourd'hui une option beaucoup plus simple - le Docker officiel bash images.

Tester un script sur plusieurs versions de bash est souvent aussi simple que :

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

Enfin, pour revenir à cette question, il est assez facile de simplement compiler (sans installer) la ou les versions de bash qui vous intéressent. Voici comment je teste 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.

Vous avez maintenant un binaire bash 3.2.57 que vous pouvez exécuter, sans réellement "l'installer" ou modifier votre environnement normal.

Pour exécuter un script shell sur cette version :

$ ./bash your_script.sh

Pour saisir une invite interactive propre :

$ 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$ 

Utilisation de env -i plutôt que d'appeler simplement le ./bash vous laisse directement avec un environnement presque vide (exécutez env de l'intérieur de la coque pour voir ce qui est encore défini). Mise à jour du PATH autorise les appels au bash (par exemple bash -version ) pour appeler le shell bash local, pas l'installation à l'échelle du système (mais notez que cela récupère tout votre PATH). Ajout de --noprofile --norc évite de charger votre .bashrc et les scripts associés.

Si vous ne souhaitez pas récupérer de PATH modifications, exécutez simplement export PATH="$PWD:$PATH" une fois à l'intérieur du sous-shell au lieu de faire partie du env commande.

J'ai une image Docker (repo) utilisant ces étapes d'installation, si cela est utile pour les gens. Je ne suggérerais pas nécessairement d'utiliser cette image directement, mais vous pouvez copier à partir du script Dockerfile/install. Licence MIT.


Jetez un œil à shenv :https://github.com/shenv/shenv. Tout comme rbenv, pyenv, goenv et autres, mais pour les shells, il vous permet d'installer différentes versions de Bash entre autres (zsh, fish, yash, etc.).

(Avertissement :c'est moi qui ai transformé pyenv en shenv !)


Linux
  1. Comment déboguer un script bash ?

  2. Comment vérifier si Bash peut imprimer des couleurs ?

  3. Comment diviser une chaîne dans un script bash

  4. Comment passer des paramètres à un script Bash ?

  5. Comment puis-je répondre automatiquement aux invites d'un script Linux Bash ?

Comment exécuter un script bash {7 méthodes}

Comment vérifier si un fichier ou un répertoire existe dans Bash

Comment écrire un script bash avec des exemples

Comment utiliser les opérateurs de test de fichiers Bash sous Linux

Comment exécuter un script bash

Comment puis-je résoudre un nom d'hôte en une adresse IP dans un script Bash ?