カッとなってUbuntu/DebianでRubygems実行コマンドのパスを通した

はじめに

MacOSXCentOSを普段使用している場合、Rubygemsの実行コマンドのパスを意識することはないですが、Ubuntu/Debianの場合そこにパスがとおっていないため、コマンドを実行するのが少々面倒です。

毎回rubygemsの実行コマンドがどこにあるか確認しなくて済むように、シェル実行時にパスを通してしまいます。
.bash_profileや.profileに追加します

手順

1. Linux DistributionとGem environmentを調べる

まずLinux Distributionは、下記のコマンドで調査できます。(例は、Ubuntuで実行した場合)

$ lsb_release -si
=> Ubuntu

これで、特定のディストリビューションの場合のみRubygemsの実行コマンドのパスを設定することができるようになりました


次にGem environmentを調べます。下記のコマンドで確認できます。

$ gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 1.3.7
  - RUBY VERSION: 1.8.7 (2010-06-23 patchlevel 299) [x86_64-linux]
  - INSTALLATION DIRECTORY: /var/lib/gems/1.8
  - RUBY EXECUTABLE: /usr/bin/ruby1.8
  - EXECUTABLE DIRECTORY: /var/lib/gems/1.8/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /var/lib/gems/1.8
     - /home/satsv/.gem/ruby/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

上記のEXECUTABLE DIRECTORY変数が取得したいパスです。あとはgrepなりsedコマンドなりを駆使して実行コマンドのパスを取得できるのですが、もっと簡単に取得する方法があります。

$ ruby -e 'require "rubygems"; puts Gem::bindir'
=> /var/lib/gems/1.8/bin

Rubyのスクリプトとして実行すれば余計な文字列もないのでそのまま使用することができます。

2. .bash_profileまたは、.profileに追記

最終的に下記のように記述すれば、シェルにログインした時にRubygemsの実行コマンドのパスが環境変数PATHに追加されると思います。
最初にwhichコマンドを実行しているのは、MacOSXではlsb_releaseがないを利用して判定から除外します。

[...]
# Gem executable directory
which lsb_release >/dev/null 2>&1 && lsb_release -si | grep -E 'Ubuntu|Debian' >/dev/null 2>/dev/null && {
  export GEM_BIN=$(ruby -e 'require "rubygems"; puts Gem::bindir')
  export PATH=$GEM_BIN:$PATH
}


Ubuntuで、毎回cap shellを実行してcapがないよって言われてたので、かっとなって調べてみました。
これで、安心して''cap shell''とか実行できますね。