2016-09-01 5 views
0

は、Rubyのファイルが/path/to/test/test.rbである:このルビスクリプトが実行ファイルへのパスをエコーし​​ているのはなぜですか?ここで

# /path/to/test/test.rb 
puts 'foobar' 

ここで私はそれを実行したときに何が起こるかです:

$ cd /path/to/test/ 
$ ruby test.rb 
foobar 

これまでのところ、とても良いです。しかし:

$ cd .. 
$ ruby test/test.rb 
/path/to/test/   # <=== wtf? 
foobar 

現在のフォルダの外で実行すると、Rubyがスクリプトへのパスを表示するのはなぜですか?この問題はRubyスクリプトでのみ発生し、$ ruby test.rbで実行するかどうかにかかわらず、またはシバンで実行可能にするかどうかに関係なく発生します。

これは私のRuby環境の何かによって引き起こされた非標準的な動作ですが、それは何かを想像することはできません。私はRailsと他の多くの宝石をインストールしています。これを引き起こす原因は何ですか?

+1

説明した動作を再現できません。 –

+1

'puts'がどこから来ているのかを調べることができますか?次のようにしてみてください: 'alias old_puts puts; def puts(s); file = File.basename(caller.first); old_puts( "puts()from#{file}:#{s}");終了 ' –

+0

再生できません。 –

答えて

1

あなたの環境ではCDPATHが設定されていると思われます。 rbenv cd 's Rubyをshimmingしているときとスクリプトファイルの相対パスを解決するときに、これによっていくつかのパスが端末にエコーされます。これまで私はを.bash_profileにエクスポートしていない(つまり、exportキーワードを設定していない)ので、この問題を回避するうえで成功しましたが、すべてでは十分ではないようです。実際、rbenv(まだリリースされていない)の現在のマスターブランチの先端では、ファイルの先頭にunset CDPATHがあるので、この問題を認識しているように見えます。次のリリースで対応したいと思います。

今日この修正プログラムが必要な場合は、次のリリースを待たずに、Brew(brew uninstall rbenv)からrbenvをアンインストールし、Gitから再インストールして入手できます。 (代わりに、それらを再インストールするの)あなたが最初にあなたの現在の~/.rbenvディレクトリ(例えばmv ~/.rbenv ~/.rbenv.bak)の名​​前を変更する必要があります、とrbenvを再インストールした後、あなたはあなたのインストールルビーや宝石を移行することもできます。

mkdir -p ~/.rbenv/versions 
mv ~/.rbenv.bak/versions/* ~/.rbenv/versions/ 

・ホープ、このことができます!

関連する問題