Program Tip

루비에서 사용자의 홈 디렉토리를 얻는 크로스 플랫폼 수단?

programtip 2020. 12. 13. 10:29
반응형

루비에서 사용자의 홈 디렉토리를 얻는 크로스 플랫폼 수단?


Java는 System.getProperty("user.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

유닉스 플랫폼 (Linux, OS X 등) ENV["HOME"]에서 File.expandpath('~')또는 Dir.home모두 HOME설정되는 환경 변수에 의존합니다 . 그러나 때때로 환경 변수가 설정되지 않은 경우가 있습니다. 이것은 시작 스크립트 또는 일부 배치 스케줄러에서 실행하는 경우 일반적입니다. 이 상황에있는 경우 다음을 통해 올바른 홈 디렉토리를 얻을 수 있습니다.

require 'etc'
Etc.getpwuid.dir

그러나이 질문은 "크로스 플랫폼"방법을 요구하기 때문에 Windows에서는 작동하지 않는다는 점에 유의해야합니다 ( Etc.getpwuid다시 돌아올 nil것입니다.). Windows에서는 ENV["HOME"]위에서 언급 한 방법이 작동합니다. HOMEWindows에서 일반적으로 설정되지 않는 변수 에도 불구하고 시작시 Ruby는 ENV["HOME"]HOMEPATHHOMEDRIVE환경 변수 기반으로 채워 집니다 . 윈도우 경우 HOMEDRIVEHOMEPATH환경 변수가 설정되지 않은이 작동하지 않습니다. 실제로 Windows 환경에서 얼마나 흔한 지 모르고 Windows에서 작동하는 대안도 모릅니다.


이것은 모든 운영 체제에서 작동합니다.

  • 현재 사용자의 경우
Dir.home
  • 주어진 사용자를 위해
Dir.home('username')

참고 : 사용자 이름은 Linux에서는 대소 문자를 구분하지만 Windows 또는 macOS에서는 구분하지 않습니다.

참고 URL : https://stackoverflow.com/questions/4190930/cross-platform-means-of-getting-users-home-directory-in-ruby

반응형