Я написал несколько небольших рубиновых скриптов для системного администрирования с использованием Ruby 1.9.3. В одном сценарии я использую:Непонятное поведение File.dirname
File.dirname(__FILE__)
Чтобы получить каталог файла сценария. Это возвращает относительный путь, однако, когда я вызываю скрипт из второго скрипта, File.dirname
возвращает абсолютный путь.
Ruby Doc перечисляет абсолютный путь возврата в своем примере, тогда как я нашел обсуждение на Ruby Forum, где пользователь говорит, что dirname
должен возвращать только относительный путь.
Я использую предложенное решение от Ruby, Форумов использовать File.expand_path
всегда получить абсолютный путь:
File.expand_path(File.dirname(__FILE__))
но есть способ, чтобы сделать поведение dirname
последовательного?
UPDATE:
Для расширения Janathan Cairs ответа, я сделал два сценария:
s1.rb:
puts "External script __FILE__: #{File.dirname(__FILE__)}"
s0.rb:
puts "Local script __FILE__: #{File.dirname(__FILE__)}"
require './s1.rb'
Запуск ./s0.rb дает последовательность нг выход:
Local script __FILE__: .
External script __FILE__: /home/kenneth/Pictures/wp/rip_vault
Да, это объясняет. И извлеченный урок будет заключаться в том, что вызов скриптов из других скриптов делает __FILE__ абсолютным путем. Думаю, это кажется достаточно разумным. – Kenneth