2010-11-16 37 views
48

Java có tính thuận tiện System.getProperty("user.home") để nhận thư mục "nhà riêng" của người dùng theo cách độc lập với nền tảng. Tương đương với Ruby là gì? Tôi không có một hộp Windows để chơi xung quanh với, và tôi cảm thấy như dựa vào tildes trong tên tập tin không phải là cách sạch nhất. Có lựa chọn thay thế nào không?Phương tiện đa nền tảng để nhận thư mục chính của người dùng trong Ruby?

Trả lời

74

Phương pháp File.expand_path sử dụng quy ước Unix điều trị các dấu ngã (~) đặc biệt, do đó ~ đề cập đến thư mục home của người dùng hiện tại và ~foo đề cập đến thư mục home foo 's.

Tôi không biết nếu có cách nào tốt hơn hay thành ngữ hơn, nhưng File.expand_path('~') sẽ giúp bạn tiếp tục.

+1

là đúng trên Windows, tho? Các tài liệu không chỉ ra là như vậy – davetron5000

+11

Dir.home thêm vào Ruby 1.9.? http://redmine.ruby-lang.org/issues/show/1027 – codecraig

+5

Mọi thứ trên trang này hoạt động (ít nhất là trên Windows 7), nhưng tôi nghĩ Dir.home và sử dụng dấu ngã dường như là tốt nhất. – davetron5000

10

ENV["HOME"] hoặc ENV["HOMEPATH"] sẽ cung cấp cho bạn những gì bạn muốn.

homes = ["HOME", "HOMEPATH"] 

realHome = homes.detect {|h| ENV[h] != nil} 

if not realHome 
    puts "Could not find home directory" 
end 
+0

là đúng trên Windows, tho? – davetron5000

+0

Tôi tin rằng đó là: http://vlaurie.com/computers2/Articles/environment.htm –

+0

@ davetron5000 Đó là những gì mã của tôi đang làm, 'HOMEPATH' là một biến môi trường chỉ trên Windows. –

82

Với Ruby 1.9 trở lên, bạn có thể sử dụng Dir.home.

8

Trên nền tảng Unix (Linux, OS X, v.v.), ENV["HOME"], File.expandpath('~') hoặc Dir.home tất cả đều dựa vào biến môi trường HOME đang được đặt. Nhưng đôi khi bạn sẽ thấy rằng biến môi trường không được đặt - điều này là phổ biến nếu bạn đang chạy từ tập lệnh khởi động hoặc từ một số trình lập lịch biểu hàng loạt. Nếu bạn đang ở trong tình huống này, bạn vẫn có thể nhận được đúng thư mục chính của mình thông qua các mục sau:

require 'etc' 
Etc.getpwuid.dir 

Có câu hỏi này là yêu cầu phương pháp "đa nền tảng" cần lưu ý rằng sẽ không hoạt động trên Windows (Etc.getpwuid sẽ trở lại nil ở đó.) trên Windows, ENV["HOME"] và các phương pháp nêu trên mà dựa vào nó sẽ làm việc, mặc dù HOME biến không được phổ biến thiết lập trên Windows - khởi động cực nhanh, Ruby sẽ điền vào ENV["HOME"] dựa trên các cửa sổ HOMEPATHHOMEDRIVE biến môi trường. Nếu các cửa sổ HOMEDRIVEHOMEPATH các biến môi trường không được đặt thì điều này sẽ không hoạt động. Tôi không biết làm thế nào phổ biến mà thực sự là trong môi trường Windows, và tôi không biết về bất kỳ thay thế mà hoạt động trên Windows.

+0

Đây là câu trả lời đúng. Cảm ơn con trỏ tới mô-đun v.v. – ckruse

Các vấn đề liên quan