GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu otestovat svůj Bash skript na starších verzích Bash?

Ačkoli je příjemné vědět, že je možné kompilovat libovolné verze bash lokálně (jak je uvedeno v mé jiné odpovědi), v dnešní době existuje mnohem jednodušší možnost - oficiální Docker bash obrázky.

Testování skriptu proti více verzím bash je často tak jednoduché jako:

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

Nakonec se vrátím k této otázce, je docela snadné jednoduše zkompilovat (bez instalace) verze bash, které vás zajímají. Zde je návod, jak testuji 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.

Nyní máte binární soubor bash 3.2.57, který můžete spustit, aniž byste jej skutečně „instalovali“ nebo upravovali vaše normální prostředí.

Chcete-li spustit skript Shell proti této verzi:

$ ./bash your_script.sh

Pro zadání čisté interaktivní výzvy:

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

Pomocí env -i místo pouhého volání ./bash přímo vám ponechá většinou prázdné prostředí (spusťte env zevnitř shellu, abyste viděli, co je ještě nastaveno). Aktualizace PATH umožňuje volání na bash (např. bash -version ) k vyvolání lokálního bash shellu, nikoli systémové instalace (ale všimněte si, že to stáhne celou vaši PATH). Přidání --noprofile --norc zabrání načítání vašeho .bashrc a související skripty.

Pokud nechcete vyzvednout žádné PATH úpravy, stačí provést export PATH="$PWD:$PATH" jednou uvnitř subshell místo jako součást env příkaz.

Mám obrázek Docker (repo) pomocí těchto instalačních kroků, pokud je to pro lidi užitečné. Nezbytně bych nedoporučoval používat tento obrázek přímo, ale můžete jej zkopírovat ze skriptu Dockerfile/install. Licence MIT.


Podívejte se na shenv:https://github.com/shenv/shenv. Stejně jako rbenv, pyenv, goenv a další, ale pro shelly vám mimo jiné umožňuje nainstalovat různé verze Bash (zsh, fish, yash atd.).

(Odmítnutí odpovědnosti:Já jsem ten, kdo přeměnil pyenv na shenv!)


Linux
  1. Jak ladit Bash skript?

  2. Jak volat funkci Bash ve skriptu Bash uvnitř Awk?

  3. Jak zkontrolovat, zda Bash může tisknout barvy?

  1. Jak rozdělit řetězec ve skriptu Bash

  2. Jak testovat PHP skript

  3. Jak předat parametry skriptu Bash?

  1. Jak mohu automaticky reagovat na výzvy ve skriptu Linux Bash?

  2. Jak spustit bash skript?

  3. Jak bash testuje „nepravdu“?