任意のバージョンの bash をローカルでコンパイルできることを知ってうれしいですが (私の他の回答で説明したように)、最近ではもっと簡単なオプションがあります - 公式の Docker bash
多くの場合、複数の bash バージョンに対してスクリプトをテストするのは次のように簡単です:
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
最後に、この質問に戻ると、興味のある bash バージョンを (インストールせずに) コンパイルするだけで簡単にできます。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.
これで、実際に「インストール」したり、通常の環境を変更したりせずに、実行できる bash 3.2.57 バイナリができました。
このバージョンに対してシェル スクリプトを実行するには:
$ ./bash your_script.sh
クリーンなインタラクティブ プロンプトを入力するには:
$ 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$
env -i
の使用 ./bash
を呼び出すだけではなく ほとんど空の環境が直接残ります( env
を実行します シェルの内側から、まだ設定されているものを確認します)。 PATH
の更新 bash
への呼び出しを許可します (例:bash -version
) システム全体のインストールではなく、ローカルの bash シェルを呼び出します (ただし、これにより PATH 全体が取り込まれることに注意してください)。 --noprofile --norc
を追加 .bashrc
の読み込みを回避します および関連するスクリプト。
PATH
を受け取りたくない場合 export PATH="$PWD:$PATH"
を実行するだけです env
の一部としてではなく、サブシェル内で一度 コマンド。
これらのインストール手順を使用する Docker イメージ (レポ) を持っています。参考になれば幸いです。このイメージを直接使用することは必ずしもお勧めしませんが、Dockerfile/install スクリプトからコピーすることは大歓迎です。 MITライセンス
shenv をご覧ください:https://github.com/shenv/shenv。 rbenv、pyenv、goenv などと同様ですが、シェルの場合は、さまざまなバージョンの Bash (zsh、fish、yash など) をインストールできます。
(免責事項:pyenv を shenv にフォークしたのは私です!)