特定のバージョンのシェルで検証したい。また、新しいシェルがリリースされたが、パッケージ管理ではまだ配布されない。 そんなシェルのバージョンを気にするシェルスクリプト開発者のために、ローカル環境に特定のシェルをインストールできる、シェルのバージョンマネージャを作りました。
基本的なコンセプトは、rvm や nvm と似ています。
インストール方法
shvm は POSIX 互換のシェルで動きます。あと必要なものは、git とシェルのコンパイル環境(C、C++のコンパイラ、make や autoconf など、インストールするシェルのバージョンによる)のみです。
shvm のインストールは、GitHub から clone して
git clone https://github.com/ueokande/shvm $HOME/.bashvm
シェル起動時に読まれるファイル(.bash_profile
, .zprofile
, .profile
など)に次の一行を加えるだけです。
[ -r $HOME/.shvm/profile ] && . $HOME/.shvm/profile
シェルのインストールから起動まで
次の例は shvm を使ったインストールから起動までの一連の流れです。
# インストール可能なbashを表示
shvm list remote bash
# bash-2.0をインストール
shvm install bash-2.0
# bash-2.0にパスを通す
shvm use bash-2.0
# インストールされたシェルと現在使用可能なシェルを表示
shvm list local
# bash-2.0を起動
bash --version
他のシェルを使いたい場合
bash 以外のシェルも利用できます。次の例は、fish をインストールして利用する例です。
# サポートされているシェルを表示
shvm list support
# インストール可能なfishを表示
shvm list remote fish
# fish-2.0.0をインストールしてパスを通す
shvm use --install fish-2.0.0
# fish-2.0.0を起動
fish --version
shebang に書く
shvm use
されたシェルはパスが通るので、shebang からも利用できます。シェルのパスはenv
を利用して解決します。
#!/usr/bin/env
echo $SHELL
例えば CI 上で様々なシェルのバージョンでテストを実行したい場合に役に立ちます。
shvm の今後の開発
現在、インストール可能なシェルは bash、fish、tcsh、zsh の 4 つのみなので、他のシェルもサポートします。