2009-12-23 5 views
4

Мне нужно получить доступ к файлам, которые относятся к местоположению моего скрипта Ruby.Доступ к файлам в том же каталоге, что и скрипт

Единственное, что я нашел, это использовать File.dirname(__FILE__), однако, если скрипт запускается из символической ссылки, __FILE__ дает расположение символической ссылки.

Я бы предпочел решение, которое не связано с просмотром __FILE__, проверяя, является ли это ссылкой, если это так, выясняя, на что указывает. Но, если нет другого пути, было бы неплохо узнать, есть ли еще камень для этого?

ответ

4

File.expand_path help?

(не имеют «Никс поле, чтобы попробовать его на)

+0

да, что разрешает символические ссылки (по крайней мере, на mac osx) – ennuikiller

+0

Не работает на моем , также OS X. Может быть, есть опция, которая должна быть настроена для этого? Я использую 'File.dirname (File.expand_path (__ FILE __))' –

+0

Я просто использую File.expand_path (".") Для символического каталога. Я запускаю ruby ​​1.9 на max osx 10.6 – ennuikiller

1

Вы всегда можете выполнить команду оболочки, как ls -l $ (pwd), с помощью popen и проанализировать ее, чтобы следовать символической ссылке. Для окон вы просто выполняете эквивалентную команду windows os (которая, как я предполагаю, существует!)

+0

Это не работает на Windows, хотя. –

+0

как вы можете получить символическую ссылку на окна? – AShelly

+0

Вы не можете, но мне нужен сценарий для правильной работы в Windows и * nix. (Windows имеет собственный формат файлов, который действует как символическая ссылка на Windows, но они являются файлами .lnk). –

3

Я предпочитаю следующий вариант: File.expand_path('../other_file_in_same_dir', __FILE__)

Второй аргумент является точкой, откуда относительный путь будет получить расширен. По умолчанию используется текущий рабочий каталог.

Смежные вопросы