2010-11-16 5 views
48

जावा के पास प्लेटफ़ॉर्म-स्वतंत्र तरीके से उपयोगकर्ता की "होम" निर्देशिका प्राप्त करने के लिए विश्वसनीय System.getProperty("user.home") है। रूबी में समतुल्य क्या है? मेरे पास खेलने के लिए एक विंडोज बॉक्स नहीं है, और मुझे लगता है कि फाइलनामों में टिल्ड्स पर भरोसा करना सबसे साफ तरीका नहीं है। क्या विकल्प हैं?रूबी में उपयोगकर्ता की होम निर्देशिका प्राप्त करने का क्रॉस-प्लेटफ़ॉर्म माध्यम है?

उत्तर

74

File.expand_path विधि, टिल्ड (~) विशेष रूप से इलाज के यूनिक्स सम्मेलन का उपयोग करता है ताकि ~ वर्तमान उपयोगकर्ता के घर निर्देशिका को संदर्भित करता है और ~foofoo घर निर्देशिका को दर्शाता है।

मुझे नहीं पता कि कोई बेहतर या अधिक बेवकूफ तरीका है, लेकिन File.expand_path('~') आपको जाना चाहिए।

+1

विंडोज पर यह सच है, क्या? दस्तावेज़ – davetron5000

+11

Dir.home रूबी 1.9 में जोड़ने के रूप में इंगित नहीं करते हैं? http://redmine.ruby-lang.org/issues/show/1027 – codecraig

+5

इस पृष्ठ पर सब कुछ काम करता है (कम से कम विंडोज 7 पर), लेकिन मुझे लगता है कि Dir.home और tilde का उपयोग करना सबसे अच्छा लगता है। – davetron5000

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 
+0

विंडोज पर यह सच है, है ना? – davetron5000

+0

मेरा मानना ​​है कि यह है: http://vlaurie.com/computers2/Articles/environment.htm –

+0

@ davetron5000 यही मेरा कोड कर रहा है, 'होमपाथ' केवल विंडोज पर एक पर्यावरण चर है। –

82

रुबी 1.9 और इससे ऊपर के साथ आप Dir.home का उपयोग कर सकते हैं।

8

यूनिक्स प्लेटफार्मों (लिनक्स, ओएस एक्स, आदि), ENV["HOME"], File.expandpath('~') या Dir.home सभी HOME वातावरण चर पर भरोसा करते हैं पर स्थापित किया जा रहा। लेकिन कभी-कभी आप पाएंगे कि पर्यावरण चर सेट नहीं है - यदि आप स्टार्टअप स्क्रिप्ट से चल रहे हैं, या कुछ बैच शेड्यूलर से यह सामान्य है। आप इस स्थिति में हैं, तो आप अभी भी माध्यम से अपने सही होम निर्देशिका प्राप्त कर सकते हैं निम्नलिखित:

require 'etc' 
Etc.getpwuid.dir 

कहा करने के बाद कि, के बाद से इस सवाल का एक "पार मंच" विधि के लिए पूछ रहा है यह ध्यान दिया जाना चाहिए यह है कि विंडोज़ पर काम नहीं करेगा (Etc.getpwuidnil वापस लौटाएगा।) विंडोज़ पर, ENV["HOME"] और ऊपर उल्लिखित विधियों पर काम करेगा, HOME वैरिएबल सामान्य रूप से विंडोज़ पर सेट नहीं किया जा रहा है - स्टार्टअप पर, रूबी ENV["HOME"] भर जाएगी विंडोज HOMEPATH और HOMEDRIVE पर्यावरण चर के आधार पर। यदि विंडोज HOMEDRIVE और HOMEPATH पर्यावरण चर सेट नहीं हैं तो यह काम नहीं करेगा। मुझे नहीं पता कि वास्तव में विंडोज वातावरण में कितना आम है, और मुझे विंडोज़ पर काम करने वाले किसी भी विकल्प के बारे में पता नहीं है।

+0

पर ठीक काम करता है यह सही जवाब है। आदि मॉड्यूल के सूचक के लिए धन्यवाद। – ckruse

संबंधित मुद्दे