在Ruby / Rake(Ruby的瑰宝)中,当前文件路径可以通过Dir.pwd
和__FILE__
获取。
有时候我想获取调用者的路径,例如弄清楚调用者提供的相对路径,该相对路径相对于其路径(而不是相对于Rakefile的路径)。
示例
在目录/home/me/workspace/proj
中的Rakefile中:
# ...
task :foo do
file_name = ENV['WHICH_FILE']
# As I can not get the caller dir, give it the Rakefile dir instead
caller_dir = Dir.pwd
file_name = "#{call_dir}/#{file_name}" unless file_name&.match? /^\//
puts File.read file_name
# ...
end
# ...
如果调用者提供了目标文件的绝对路径,则没问题:
$ WHICH_FILE=/home/me/workspace/proj/suba/subb/subc/file.txt rake foo
如果/home/me/workspace/proj
中的呼叫者提供了相对路径,则仍然没有问题:
$ WHICH_FILE=suba/subb/subc/file.txt rake foo
如果/home/me/workspace/proj/suba
中的呼叫者提供了相对路径,则file_name可能指向错误的位置:
$ WHICH_FILE=subb/subc/file.txt rake foo
现在file_name
将是/home/me/workspace/proj/subb/subc/file.txt
,这可能不是呼叫者想要的。
问题
是否可以在Ruby / Rake中获取调用者的路径?如果可能,怎么办?
答案 0 :(得分:0)
您可以使用Dir.pwd
来告知用户当前的位置,就像您说的那样,但是无法猜测用户真正想要的绝对路径。
这就是为什么大多数脚本(或应用程序等)都具有一个ROOT_DIR
的原因,您可以将其默认设置为其余目录结构的前缀,或者只是假设传递的文件位于当前文件夹下(由pwd显示)。
您的选择是在您的代码中的某个位置设置此ROOT_DIR,或者只是开放以使用户有机会为您提供文件的相对路径,而无需真正知道指向该文件的绝对路径,并且仅假设其位于当前目录下