루비에서 사용자의 홈 디렉토리를 얻는 크로스 플랫폼 수단?
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"]
위에서 언급 한 방법이 작동합니다. HOME
Windows에서 일반적으로 설정되지 않는 변수 에도 불구하고 시작시 Ruby는 ENV["HOME"]
창 HOMEPATH
및 HOMEDRIVE
환경 변수 를 기반으로 채워 집니다 . 윈도우 경우 HOMEDRIVE
및 HOMEPATH
환경 변수가 설정되지 않은이 작동하지 않습니다. 실제로 Windows 환경에서 얼마나 흔한 지 모르고 Windows에서 작동하는 대안도 모릅니다.
이것은 모든 운영 체제에서 작동합니다.
- 현재 사용자의 경우
Dir.home
- 주어진 사용자를 위해
Dir.home('username')
참고 : 사용자 이름은 Linux에서는 대소 문자를 구분하지만 Windows 또는 macOS에서는 구분하지 않습니다.
'Program Tip' 카테고리의 다른 글
XAML에서 Canvas의 Children 속성을 바인딩 할 수 있습니까? (0) | 2020.12.13 |
---|---|
C ++에서 int에서 상속 할 수없는 이유는 무엇입니까? (0) | 2020.12.13 |
하나의 문에 이름이있는 숫자 형 벡터를 만드시겠습니까? (0) | 2020.12.13 |
SQL Server Management Studio에서 저장 프로 시저 코드를 보는 방법 (0) | 2020.12.13 |
C에서 Segfault를 생성하는 가장 간단한 표준 준수 방법은 무엇입니까? (0) | 2020.12.13 |