saw*_*awa 3 ruby filenames symlink
当通过符号链接加载/需要文件时,引用文件名的所有方法,关键字等似乎都是指链接名称,而不是真实文件名.例如,假设我有一个文件foo.rb,其内容类似于:
puts __FILE__, __dir__, caller
Run Code Online (Sandbox Code Playgroud)
和bar.rb指向的符号链接foo.rb.如果我foo.rb通过符号链接加载/要求bar.rb,则上述命令给出的所有文件名都描述符号链接名称bar.rb,而不是真实文件名foo.rb.
有没有办法来调用的同行__FILE__,__dir__,caller等用的文件名指向真正的文件,而不是符号链接的名字呢?
您无法轻松更改所有这些常量和内置函数,但您可以这样做:
File.realpath( "/path/to/file/or/symlink" )
Run Code Online (Sandbox Code Playgroud)
要么
require 'pathname'
Pathname.new( "/path/to/file/or/symlink" ).realpath
Run Code Online (Sandbox Code Playgroud)
示例文件realfile.rb
names = [ __FILE__, __dir__]
p names
p names.map { |name| File.realpath(name) }
Run Code Online (Sandbox Code Playgroud)
设置并调用如下:
ln -s realfile.rb thelinkfile
ruby thelinkfile
Run Code Online (Sandbox Code Playgroud)
输出:
["thelinkfile", "/Users/neilslater/scraps"]
["/Users/neilslater/scraps/realfile.rb", "/Users/neilslater/scraps"]
Run Code Online (Sandbox Code Playgroud)