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!)