rvm が多機能&壊れやすすぎて Homebrew の ruby を直にインストールして使っていたのですが,Homebrew の ruby はバージョンを上げるときにgemで入れたコマンドを引き継いでくれなかったり,gemでインストールしたコマンドを反映してくれないので,rbenv という ruby のパッケージマネージャを使ってみる事にしました.
しかし,rbenvも若干面倒なところがあり,gemでインストールしたコマンドを使う前にrbenv rehashをして $HOME/.rvm/shims 以下の情報を更新しなくてはいけません.
そこで,gem でインストールしたときでもいちいち rbenv rehash しなくて良い方法を考えました.
方法1: rbenv-rehash という gem を入れる
% gem install rbenv-rehash
とするとインストールできます.
しかし,複数のRubyを管理している場合,各バージョンのRubyのgemにインストールしておかなければいけません.
また,シェルのビルトインコマンドのほうのrehashのほうは行なってくれないため,そっちは結局手動で更新する必要があります.
方法2: zshの関数でgemコマンドのラッパーをつくる
.zshrc に次のようにgem関数を定義します.
function gem(){ $HOME/.rbenv/shims/gem $* if [ "$1" = "install" ] || [ "$1" = "i" ] || [ "$1" = "uninstall" ] || [ "$1" = "uni" ] then rbenv rehash rehash fi }
これにより,rubygemsをインストールしたあとは必ず rbenv rehash と rehash が走ります.
これなら各Rubyごとにインストールしないといけないといった手間もありません.
bashについては使っていないので分かりませんが,おそらく同じ方法でいけるのではないかと思います.