1台のコンピュータで複数のバージョンのシェルを実行する方法

1台のコンピュータで複数のバージョンのシェルを実行する方法

可能な限り多くの環境でいくつかのスクリプト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. いくつかの組み合わせはそれほど重要ではないので無視することができます。
  2. 最後に、各オペレーティングシステムの複数のバージョンをテストしたいと思います。

しかし、それらはこの質問とは別のものなので、これが可能かどうかを考慮するためにそれらを別々にします。

だから:単一のシステムに特定のシェルの複数のバージョンをインストールして使用する実用的な方法はありますか?


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

答え3

アスダフランタイムが言語、シェルなど何であれ、「単一のCLIツールを使用して複数のランタイムバージョンを管理する」ように特別に設計されています。持っているZshプラグインしたがって、これは独自のソリューションをローリングするよりもはるかに便利です。

修正する より便利かもしれませんが、言及されているasdfすべてのシェルのプラグインがないので、Zancheyの方法を使用することをお勧めします。

関連情報