В Ruby / Rake (гем для Ruby) текущий путь к файлу можно получить через Dir.pwd
и __FILE__
.
Бывают моменты, когда я хочу узнать путь вызывающего, например, выяснить относительный путь, предоставленный вызывающим, относительно его пути (но не относительно пути файла Rakefile).
Пример
В Rake-файле из каталога /home/me/workspace/proj
:
# ...
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
указывает относительный путь, имя_файла может указывать на неправильное место:
$ WHICH_FILE=subb/subc/file.txt rake foo
Теперь file_name
будет /home/me/workspace/proj/subb/subc/file.txt
, что может не соответствовать желанию вызывающего абонента.
Вопросы
Возможно ли получить путь звонящего в Ruby / Rake? Если это возможно, то как?