2016-09-01 3 views
0

Вот файл рубин в /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 или делает ее исполняемой с помощью shebang.

Это определенно нестандартное поведение, вызванное чем-то в моей среде 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 при рубинге Ruby и при разрешении относительного пути к файлу скрипта, и это приводит к тому, что некоторые терминалы будут эхом отдаваться терминалу. Раньше мне приходилось сталкиваться с этой проблемой, не экспортируя CDPATH в мой .bash_profile (т. Е. Просто установив его без ключевого слова export), но, похоже, этого недостаточно во всех случаях. Фактически, в текущем главном ветви rbenv (который еще не был выпущен) они unset CDPATH в верхней части файла, поэтому кажется, что они знают об этой проблеме и надеются решить ее в следующей версии ,

Если вы хотите это исправить сегодня, вместо того, чтобы ждать следующей версии, вы можете получить его, удалив rbenv через Brew (brew uninstall rbenv) и переустановив его через Git. Сначала вам нужно будет переименовать текущий ~/.rbenv каталог (например, mv ~/.rbenv ~/.rbenv.bak), и после переустановки rbenv, вы можете перенести ваши установленные рубины и драгоценные камни (вместо их переустановки):

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

Надеется, что это помогает!

Смежные вопросы