Следующее не работает Errno::ENOENT: No such file or directory
, даже если файл существует:
open('~/some_file')
Однако я могу сделать это:
open(File.expand_path('~/some_file'))
У меня два вопроса:
- Почему
open
тильда не обрабатывается как указывающая на домашний каталог? - Есть ли способ получше
File.expand_path
?
open(ENV['HOME']+'some_file')
File.join(ENV['HOME'], '/some_file')
чтобы он работал в обоих случаях.Не уверен, было ли это доступно до Ruby 1.9.3, но я считаю, что наиболее элегантным решением является использование того,
Dir.home
что является частью ядра.источник
Вместо того, чтобы полагаться на
$HOME
правильную установку переменной среды, что может быть проблемой при использовании компьютеров в общей сети для разработки, вы можете получить это из Ruby, используя:Я считаю, что это идентифицирует текущего пользователя, вошедшего в систему, и получает его домашний каталог, а не полагается на
$HOME
заданную глобальную переменную среды. Я считаю, что это альтернативное решение вышеупомянутому.источник
Я обнаружил проблему с тильдой, и был создан патч для добавления,
absolute_path
который рассматривает тильду как обычный символ.Из файловой документации:
источник