Java有一个方便的System.getProperty("user.home")
以独立于平台的方式获取用户的“home”目录。 Ruby中的等价物是什么?我没有Windows框可以玩,我觉得依靠文件名中的波浪号并不是最干净的方式。还有其他选择吗?
答案 0 :(得分:97)
使用Ruby 1.9及更高版本,您可以使用Dir.home
。
答案 1 :(得分:82)
File.expand_path
方法使用特殊处理波形符(~
)的Unix约定,以便~
引用当前用户的主目录,~foo
引用{ {1}}的主目录。
我不知道是否有更好或更惯用的方式,但foo
应该让你去。
答案 2 :(得分:10)
ENV["HOME"]
或ENV["HOMEPATH"]
可以为您提供所需内容。
homes = ["HOME", "HOMEPATH"]
realHome = homes.detect {|h| ENV[h] != nil}
if not realHome
puts "Could not find home directory"
end
答案 3 :(得分:10)
在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"]
HOMEPATH
和HOMEDRIVE
个环境变量。如果未设置windows HOMEDRIVE
和HOMEPATH
环境变量,则此操作无效。我不知道在Windows环境中实际上有多常见,我不知道任何适用于Windows的替代方案。
答案 4 :(得分:3)
这适用于所有操作系统
Dir.home
Dir.home('username')
注意:用户名在Linux上区分大小写,但在Windows或macOS上不区分大小写