GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo puedo probar mi script Bash en versiones anteriores de Bash?

Aunque es bueno saber que es posible compilar localmente versiones arbitrarias de bash (como discutí en mi otra respuesta), en estos días hay una opción mucho más simple:el Docker oficial bash imágenes.

Para probar un script contra múltiples versiones de bash es a menudo tan simple como:

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

Finalmente, volviendo a esta pregunta, es bastante fácil simplemente compilar (sin instalar) las versiones de bash que le interesan. Así es como estoy probando 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.

Ahora tiene un binario bash 3.2.57 que puede ejecutar sin "instalarlo" ni modificar su entorno normal.

Para ejecutar un script de shell en esta versión:

$ ./bash your_script.sh

Para ingresar un indicador interactivo limpio:

$ 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 en lugar de simplemente llamar a ./bash te deja directamente con un entorno mayormente vacío (ejecuta env desde el interior del caparazón para ver lo que todavía está configurado). Actualizando el PATH permite llamadas a bash (por ejemplo, bash -version ) para invocar el shell bash local, no la instalación de todo el sistema (pero tenga en cuenta que esto atrae toda su RUTA). Agregando --noprofile --norc evita cargar tu .bashrc y guiones asociados.

Si no quieres recoger ningún PATH modificaciones, simplemente ejecute export PATH="$PWD:$PATH" una vez dentro de la subcapa en lugar de como parte del env comando.

Tengo una imagen de Docker (repo) usando estos pasos de instalación, si eso es útil para que la gente haga referencia. No sugeriría necesariamente usar esta imagen directamente, pero puede copiarla desde el script Dockerfile/install. Licencia MIT.


Echa un vistazo a shenv:https://github.com/shenv/shenv. Al igual que rbenv, pyenv, goenv y otros, pero para shells, te permite instalar diferentes versiones de Bash entre otras (zsh, fish, yash, etc.).

(Descargo de responsabilidad:¡soy yo quien transformó pyenv en shenv!)


Linux
  1. ¿Cómo depurar un script Bash?

  2. ¿Es posible emular versiones anteriores de Bash?

  3. ¿Cómo establecer parámetros cuando Pipe Bash Script to Bash?

  4. ¿Cómo llamar a una función Bash en Bash Script dentro de Awk?

  5. ¿Cómo puedo ejecutar una función desde un script en la línea de comandos?

Cómo ejecutar un script Bash {7 métodos}

Cómo verificar si existe un archivo o directorio en Bash

Cómo escribir un script Bash con ejemplos

Cómo usar operadores de prueba de archivos Bash en Linux

Cómo ejecutar un script Bash

¿Cómo prueba bash 'falso'?