シェルのバージョンマネージャを作りました

shvm

特定のバージョンのシェルで検証したい。また、新しいシェルがリリースされたが、パッケージ管理ではまだ配布されない。 そんなシェルのバージョンを気にするシェルスクリプト開発者のために、ローカル環境に特定のシェルをインストールできる、シェルのバージョンマネージャを作りました。

基本的なコンセプトは、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 つのみなので、他のシェルもサポートします。


Profile picture

Shin'ya Ueoka

B2B向けSaaSを提供する会社の、元Webエンジニア。今はエンジニアリング組織のマネジメントをしている。