跨平台手段在Ruby中获取用户的主目录?

Java具有方便的System.getProperty("user.home")以独立于平台的方式获取用户的“home”目录。 Ruby中的等价物是什么? 我没有一个Windows的框来玩,我觉得依靠文件名中的潦草不是最干净的方式。 有替代品吗?

File.expand_path方法使用Unix惯例特殊处理代字号( ~ ),以便~表示当前用户的主目录, ~foo表示foo的主目录。

我不知道是否有一个更好或更习惯的方式,但File.expand_path('~')应该让你去。

使用Ruby 1.9及以上版本,您可以使用Dir.home

ENV["HOME"]ENV["HOMEPATH"]应该给你你想要的。

 homes = ["HOME", "HOMEPATH"] realHome = homes.detect {|h| ENV[h] != nil} if not realHome puts "Could not find home directory" end 

在unix平台(linux,OS X等)上, ENV["HOME"]File.expandpath('~')Dir.home都依赖于设置的HOME环境variables。 但是有时你会发现环境variables没有被设置 – 如果你是从一个启动脚本运行,或者从一些批处理调度程序运行,这是很常见的。 如果您处于这种情况,您仍然可以通过以下方式获取正确的主目录:

 require 'etc' Etc.getpwuid.dir 

话虽如此,因为这个问题是要求一个“跨平台”的方法,必须指出,这不会在Windows上工作( Etc.getpwuid将返回nil在那里。)在Windows上, ENV["HOME"]和上面提到的依赖于它的方法可以工作,尽pipeHOMEvariables不是在Windows上通常设置的 – 在启动时,Ruby将根据windows HOMEPATHHOMEDRIVE环境variables填充ENV["HOME"] 。 如果没有设置Windows HOMEDRIVEHOMEPATH环境variables,那么这将不起作用。 我不知道在Windows环境下实际上有多普遍,我不知道在Windows上有什么替代方法。