可能な限り多くの環境でいくつかのスクリプト1をテストするために、UNIX(またはUnixシリーズオペレーティングシステム)を使用して複数の仮想マシンをセットアップしました。
- Linux
- ソラリス
- OSX2
- FreeBSD
しかし、さまざまな点で、実際には、他のオペレーティングシステムでテストするよりも興味を持っている各シェルの異なるバージョンでテストする方が重要だと思います。
私は私の仮想マシンが無限に変わるように見えたくないので、与えられた仮想マシンに各シェルの複数のバージョンをインストールしたいと思います。たとえば、テストには[:bash,:zsh,:fish,:ksh,:csh,:tcsh,:sh,:dash,:ash]
9つのシェルがあり、各シェルの平均3つのバージョンをテストすると仮定すると、100を超えるVMがあります。
# operating_systems * shells * shell_versions
4 * 9 * 3
単一のコンピュータまたは仮想マシンに特定のシェルの複数のバージョンをインストールして使用するための実用的な方法はありますか?たとえば、1つのLinux VMにBash 1、Bash 2、Bash 3、およびBash 4をインストールできますか?
私は気づいた
- いくつかの組み合わせはそれほど重要ではないので無視することができます。
- 最後に、各オペレーティングシステムの複数のバージョンをテストしたいと思います。
しかし、それらはこの質問とは別のものなので、これが可能かどうかを考慮するためにそれらを別々にします。
だから:単一のシステムに特定のシェルの複数のバージョンをインストールして使用する実用的な方法はありますか?
1 私は「スクリプト」という言葉を緩く使います。私がテストしたい最初のことはrc
、シェルファイルから、または何かを取得すること.zshrc
です.bash_profile
。したがって、独自のshebang行はありません。だから私たちはコードスニペットを複数のシェルで動作させるようにしたいと思います。他のクロスシェル便利なものは、他のコンピュータで使用したい関数とエイリアスです。私のお気に入りのシェルはすべて必ずしもありませんが、BashやKornを使用できるようにすることもできます。また、私の好きなシェルをshebang行に入れることができなくても、複数のコンピュータのシェルスクリプトで使用したい便利な部分もあります。
誤解を招く内容を言わないために、完全に話題から抜け出した2つのメモ :私は実際にOSを設定していません。誰も「いいえ!OS Xを含まないのはどうですか?」とは言わないでしょう。
答え1
ソースからビルドする場合は、各バージョンを別々のプレフィックスにインストールし、それに応じてスクリプトのパスを調整できます。
bash、fish、ksh、tcsh、zsh、dashはすべて設定パラメータをサポートしているため、--prefix
各バージョンをダウンロードして実行できます./configure --prefix=/opt/SHELL-VERSION; make; make install
。次に、各バージョンを使用するには、PATHを/opt/SHELL-VERSION/bin
前に設定します。
cshは少し異なり、より多くの手動操作が必要です。必要と思われる場合は、FreeBSDソースツリーからソースコードを取得してMakefileを編集できますが、実際にはほとんどの人がtcshを使用します。
Ashには正式なソースがないと思いますが、同様に処理できます。
答え2
Zancheyが述べたように、各シェルバージョンを独自のプレフィックスにインストールできます。 PATHに入れるには、名前を変更して/usr/bin/にコピーします。たとえば、
$ bash1
bash-1.0$ ./myscript.sh
# Code here.
bash-1.0$ bash2
# And so on...
user@user-MacBook-Pro:~$ zsh1
# and again until you finish...
user@user-MacBook-Pro ~> exit
# Don't just skip into shells, or deal with the exit. Or just spam ^D.
$ exit