在Ruby中獲取用戶主目錄的跨平台方法?




cross-platform (3)

Java具有方便的System.getProperty("user.home")以與平台無關的方式獲取用戶的“home”目錄。 Ruby中的等價物是什麼? 我沒有Windows框可以玩,我覺得依靠文件名中的波浪號並不是最乾淨的方式。 還有替代品嗎?


File.expand_path方法使用特殊處理波形符( ~ )的Unix約定,這樣~指的是當前用戶的主目錄, ~foo指的是foo的主目錄。

我不知道是否有更好或更慣用的方式,但File.expand_path('~')應該讓你去。


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環境變量。 但有時您會發現環境變量未設置 - 如果您從啟動腳本或某些批處理調度程序運行,這種情況很常見。 如果您遇到這種情況,您仍然可以通過以下方式獲取正確的主目錄:

require 'etc'
Etc.getpwuid.dir

話雖如此,由於這個問題要求“跨平台”方法,必須注意這在Windows上不起作用( Etc.getpwuid將在那裡返回nil 。)在Windows上, ENV["HOME"]和上面提到的依賴它的方法將起作用,儘管HOME變量不常在Windows上設置 - 在啟動時,Ruby將根據Windows HOMEPATHHOMEDRIVE環境變量填寫ENV["HOME"] 。 如果未設置Windows HOMEDRIVEHOMEPATH環境變量,則此操作無效。 我不知道在Windows環境中實際上有多常見,我不知道在Windows上有什麼替代方案。







cross-platform