実行中の Ruby の install ディレクトリを知る

xig_installer のために実行中の Ruby のパスを知りたいと思ったが、当初は方法がよく分からず、とりあえず放置していた。これをちゃんと調べ直した。

ENVじゃなかった

2010-01-07

17:05:43 >wtnabe< ruby -e 'p ENV["_"]' って自分自身を実行している
Ruby インタプリタを得る方法という理解は合ってますか?
17:14:06 <eban> @wtnabe 合ってないです。bashとかが設定してるので、shだ
とだめ
17:35:11 >wtnabe< @eban あざっす。ちなみに純粋に Ruby スクリプトだけで
知る方法ってあるんですかね?

ごそごそ調べると require 'rbconfig' が必要らしい。

2010-01-08

11:15:51 >wtnabe< 実行中の Ruby のパスは ruby -e 'require "rbconfig";
p Config::CONFIG["bindir"]' ですか?

Config -> RbConfig 移行問題

2010-01-12

18:56:55 >wtnabe< Ruby 1.8 は Config で 1.9 は RbConfig なのか。えーと
どう書けばいいのかな。
19:00:59 <znz> @wtnabe ConfigでもRbConfigでも見えるからどっちでもいい。
もうサポートされてない古いのも対応したければConfigしかなさそうだけど。
19:10:01 >wtnabe< @znz Config はいずれ廃止予定とかではないんですかね?
個人的には 1.8.5 以降だけ相手にすればいいのでギリギリどっちでもオッケー
なんすけど。
19:12:59 <znz> @wtnabe 廃止予定だと思うので、新しいのだけで良ければ
RbConfigがいいのではないかと。
19:12:59 <nsiena> @wtnabe require 'rbconfig' 後に定義状況を
const_defined? で調べて RbConfig = Config とかではだめです?
19:14:29 >wtnabe< @nsiena あーそんなんでいいですね。ありがとうございま
す。

まとめ

最終的に出来上がった部分がコレ。

require 'rbconfig'
RbConfig = Config unless defined? RbConfig
RbConfig::CONFIG['bindir']

cf. Commit 651136d20e9925d9a86d224272acae13dad84c31 to wtnabe's xig_installer - GitHub

RbConfig は Ruby 1.8.5 以降で定義されているので、まぁ現役で使われている Ruby のほとんどはわざわざこの書き方にしなくても RbConfig を読めば大丈夫だと思う。

参考

ちなみにちょっと前にこんな議論があった。インストールディレクトリではなくて実行パスだけど、 basename 噛ませばいいだけだし、似たようなもんかと。

MarkMail って使いやすいなぁ。すごいなぁ。

More