На платформах Unix (linux, OS X и т. Д.) ENV["HOME"]
, File.expandpath('~')
или Dir.home
все зависят от устанавливаемой переменной среды HOME
.Но иногда вы обнаружите, что переменная окружения не установлена - это часто встречается, если вы запускаете из сценария запуска или из некоторых пакетных планировщиков.Если вы находитесь в такой ситуации, вы все равно можете получить свой правильный домашний каталог с помощью следующего:
require 'etc'
Etc.getpwuid.dir
Сказав это, так как этот вопрос требует "кроссплатформенного" метода, необходимо отметитьчто это не будет работать в Windows (Etc.getpwuid
вернет туда nil
.) В Windows ENV["HOME"]
и упомянутые выше методы будут работать, несмотря на то, что переменная HOME
обычно не устанавливается в Windows- при запуске Ruby будет заполнять ENV["HOME"]
в зависимости от переменных среды windows HOMEPATH
и HOMEDRIVE
.Если переменные окружения windows HOMEDRIVE
и HOMEPATH
не установлены, это не будет работать.Я не знаю, насколько часто это происходит в средах Windows, и я не знаю ни одной альтернативы, которая работает в Windows.