実行中の Ruby の install ディレクトリを知る
xig_installer のために実行中の Ruby のパスを知りたいと思ったが、当初は方法がよく分からず、とりあえず放置していた。これをちゃんと調べ直した。
ENVじゃなかった
- Twitter / wtnabe: ruby -e 'p ENV["_"]' って自分自 …
- Twitter / eban: @wtnabe 合ってないです。bashとかが設定し …
- Twitter / wtnabe: 実行中の Ruby のパスは ruby -e 're …
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 移行問題
- Twitter / wtnabe: Ruby 1.8 は Config で 1.9 は …
- Twitter / Kazuhiro NISHIYAMA: @wtnabe ConfigでもRbConfigでも …
- Twitter / Kazuhiro NISHIYAMA: @wtnabe 廃止予定だと思うので、新しいのだけで …
- Twitter / Siena.: @wtnabe require '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 噛ませばいいだけだし、似たようなもんかと。
- [ruby-dev:39755] RbConfig.rubybin
- [ruby-dev:39755] RbConfig.rubybin - Tanaka Akira - org.ruby-lang.ruby-dev - MarkMail
MarkMail って使いやすいなぁ。すごいなぁ。