GNU/Linux >> Linux の 問題 >  >> Linux

古いバージョンの Bash で Bash スクリプトをテストするにはどうすればよいですか?

任意のバージョンの 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 にフォークしたのは私です!)


Linux
  1. Bashスクリプトをデバッグする方法は?

  2. BashスクリプトをBashにパイプするときにパラメータを設定する方法は?

  3. Bashが色を印刷できるかどうかを確認する方法は?

  1. Bashスクリプトで文字列を分割する方法

  2. PHP スクリプトをテストする方法

  3. Linux Bash スクリプトのプロンプトに自動的に応答するにはどうすればよいですか?

  1. Bashスクリプトをファイルに接続できますか?

  2. 古いバージョンのBashをエミュレートすることは可能ですか?

  3. Awk内のBashスクリプトでBash関数を呼び出す方法は?