3

当通过符号链接加载/需要文件时,引用文件名的所有方法、关键字等似乎都引用链接名,而不是真实的文件名。例如,假设我有一个文件foo.rb,其内容类似于:

puts __FILE__, __dir__, caller

bar.rb和一个指向的符号链接foo.rbfoo.rb如果我通过符号链接加载/要求bar.rb,那么上面命令给出的所有文件名都描述了符号链接名bar.rb,而不是真实的文件名foo.rb

有没有办法用指向真实文件的文件名而不是符号链接名来调用 , , 等的对应__FILE____dir__caller

4

1 回答 1

5

您无法轻易更改所有这些常量和内置函数,但您可以这样做:

File.realpath( "/path/to/file/or/symlink" )

或者

require 'pathname'
Pathname.new( "/path/to/file/or/symlink" ).realpath

示例文件realfile.rb

names = [ __FILE__, __dir__]
p names
p names.map { |name| File.realpath(name) }

像这样设置和调用:

ln -s realfile.rb thelinkfile
ruby thelinkfile

输出:

["thelinkfile", "/Users/neilslater/scraps"]
["/Users/neilslater/scraps/realfile.rb", "/Users/neilslater/scraps"]
于 2013-09-21T17:46:57.813 回答