访问符号链接文件的真实文件名

时间:2013-09-21 17:42:12

标签: ruby filenames symlink

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

puts __FILE__, __dir__, caller

以及指向bar.rb的符号链接foo.rb。如果我通过符号链接foo.rb加载/需要bar.rb,则上述命令给出的所有文件名都描述了符号链接名称bar.rb,而不是真实文件名{{ 1}}。

有没有办法调用foo.rb__FILE____dir__等的对应方,文件名指向真实文件,而不是符号链接名称?

1 个答案:

答案 0 :(得分: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"]