См. следующий пример:
puts __FILE__ #test.rb
puts File.expand_path(__FILE__) #C:/TEMP/test.rb
Dir.chdir('..')
puts __FILE__ #test.rb
puts File.expand_path(__FILE__) #C:/test.rb
После (глобального) chdir
expand_path
возвращает неверный результат.
Как получить правильный результат?
Я попытался использовать второй параметр File.expand_path
:
puts File.expand_path(__FILE__, 'temp') #C:/TEMP/test.rb
puts File.expand_path(__FILE__, 'c:/temp') #C:/TEMP/test.rb
Но чтобы использовать его, я должен знать путь __FILE__
.
Кажется, что команда require_relative
игнорирует все chdir
-действия. Поэтому у меня есть надежда, что есть способ получить «настоящий» каталог файла.
Примечания:
- Я знаю блочную версию Dir.chdir - для моей конкретной задачи я не могу ее использовать.
- Мое фактическое решение: я сохраняю полный путь перед сменой каталога (я также могу сохранить
Dir.pwd
перед сменой каталога).