2010-02-05 7 views

उत्तर

38

File.dirname(__FILE__) आपको स्क्रिप्ट चलाने के सापेक्ष पथ देगा। File.expand_path(File.dirname(__FILE__)) आपको पूर्ण पथ देगा।

+0

यह है कि ऐसा करने के लिए गलत तरीका है और कीड़े हो सकती है। \t ध्यान दें कि एक बार Dir.chdir का उपयोग किया जाता है, यह स्क्रिप्ट संग्रहित होने की तुलना में अलग निर्देशिका हो सकती है। '__dir__' ऐसा करने का सही तरीका है। –

+0

रूबी <2.0 –

-4

ENV ["पीडब्लूडी"] लिनक्स के तहत मेरे लिए सबसे आसान तरीका प्रतीत होता है। मुझे ओएस-अज्ञेय तरीके से पता नहीं है।

+0

पर फंस गए किसी के लिए यह एकमात्र तरीका प्रतीत होता है! मेरे लिनक्स-विशिष्ट सामान्य ज्ञान के लिए अच्छा है। –

+0

यह घर निर्देशिका है, वर्तमान कार्य निर्देशिका या निर्देशिका जहां स्क्रिप्ट स्थित है। –

+0

बी * गजर, नींद की कमी यह करेगी। मेरा मतलब एनएनवी ["पीडब्लूडी"] था। लेकिन बीए का जवाब बेहतर तरीका है। – Shadowfirebird

23

उपयोग __dir__

रूबी 2.0 के रूप में, __dir__ सबसे आसान तरीका यह प्राप्त करने के लिए है। यह

फ़ाइल की निर्देशिका के कैनोनिकलकृत पूर्ण पथ को वापस करता है जिससे इस विधि को बुलाया जाता है।

__dir__ दस्तावेज़, और "Why is __FILE__ uppercase and __dir__ lowercase?" देखें।

+0

ठीक है, सही उत्तर होने के अलावा' __dir__' से अलग, अपरकेस-बनाम-लोअरकेस अंतर को जोड़ने के लिए धन्यवाद, यह मेरा पहला प्रश्न था क्योंकि इसे ढूंढने के बाद कुंआ :) – SidOfc

2

उपयोग __dir__

File.dirname(__FILE__) जहां स्क्रिप्ट संग्रहीत किया जाता है निर्देशिका पाने के लिए एक उचित तरीका नहीं है।

स्क्रिप्ट फ़ाइल के साथ काम करने वाली निर्देशिका और निर्देशिका शुरू करने पर वही है, लेकिन यह बदल सकता है।

उदाहरण के लिए:

Dir.chdir('..') do 
    puts __dir__ 
    puts File.expand_path(File.dirname(__FILE__)) 
end 

/Desktop/tmp में संग्रहीत चल रहा यह उत्पादन दे देंगे स्क्रिप्ट फ़ाइल के लिए

/home/mateusz/Desktop/tmp 
/home/mateusz/Desktop