为什么这个ruby脚本会回显可执行文件的路径?

时间:2016-09-01 18:29:08

标签: ruby

这是/path/to/test/test.rb的一个Ruby文件:

# /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 个答案:

答案 0 :(得分:1)

我认为这是因为您的环境中设置了CDPATH。 rbenv cd在填充Ruby时以及解析脚本文件的相对路径时,会导致某些路径回显到终端。在过去,我通过不在我的CDPATH中导出.bash_profile(即只设置它,没有export关键字)来解决此问题,但我们似乎这在所有情况下都是不够的。实际上,在rbenv的当前主分支提示(尚未发布)中,它们unset CDPATH位于文件的顶部,所以看起来好像他们已经意识到这个问题并希望在下一个版本中解决它。

如果您今天想要此修复程序,而不是等待下一个版本,则可以通过Brew(brew uninstall rbenv)卸载rbenv并通过Git重新安装来获取它。您首先需要重命名当前的~/.rbenv目录(例如mv ~/.rbenv ~/.rbenv.bak),重新安装rbenv后,您可能希望迁移已安装的rubies和gem(而不是重新安装它们):

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

希望这有帮助!