कैसे वर्तमान कार्यशील निर्देशिका के irb से पूर्ण पथ प्राप्त करने के लिए


273

मैं विंडोज पर रूबी चला रहा हूं, हालांकि मुझे नहीं पता कि क्या इससे फर्क पड़ता है। मैं बस इतना करना चाहता हूं कि वर्तमान वर्किंग डाइरेक्टरी की निरपेक्ष राह मिल जाए। क्या यह irb से संभव है? स्पष्ट रूप से एक स्क्रिप्ट से इसका उपयोग संभव हैFile.expand_path(__FILE__)

लेकिन irb से मैंने निम्नलिखित कोशिश की और "अनुमति अस्वीकृत" त्रुटि मिली:

File.new(Dir.new(".").path).expand

10
प्रश्न वास्तव में स्पष्ट नहीं है: क्या आप चाहते हैं कि ए) वर्तमान कार्यशील निर्देशिका (जो है Dir.pwd) या क्या आप उस निर्देशिका को चाहते हैं जहां वर्तमान में चल रही स्क्रिप्ट स्थित है (जो है File.dirname(__FILE__))? एक स्क्रिप्ट को कहीं और से कॉल करने की कल्पना करें (जैसे ruby testdirectory/testscript.rb) यहाँ, दोनों अलग होंगे!
एंथेस

1
@amenthes आप दावा करते हैं कि मेरा प्रश्न अस्पष्ट है और फिर पूछें "क्या आप चाहते हैं कि a) वर्तमान कार्यशील निर्देशिका ...." और मेरे प्रश्न में कहा गया है "मैं जो करना चाहता हूं उसे वर्तमान कार्यशील निर्देशिका का पूर्ण मार्ग मिल रहा है ..."। क्या अस्पष्ट है?
डेक्सिजन

7
यह स्पष्ट नहीं है क्योंकि वाक्य "स्पष्ट रूप से एक स्क्रिप्ट का उपयोग करना संभव है File.expand_path(__FILE__)" - क्योंकि __FILE__वर्तमान स्थान वर्तमान वर्किंग डायर (जो है Dir.pwd) की तुलना में एक अलग जानवर है ।
एंथेस

2
@amenthes मैंने सोचा कि मैंने "irb" से अलग एक बहुत अच्छा काम किया है, जो कि सवाल के शीर्षक में सही है (और दो बार प्रश्न के भीतर ही), "एक स्क्रिप्ट से"
Dexygen

जवाबों:


515

Dir.pwd चालबाजी करने लगता है।

http://ruby-doc.org/core/Dir.html#method-c-pwd


4
यह लगभग 10 साल हो गया है, लेकिन फिर भी, इस उत्तर के लिए धन्यवाद।
निक शवडेरर

1
नोट: यह वर्तमान फ़ाइल का स्थान वापस नहीं करता है । ऐसा करने के लिए, नीचे दिए गए उत्तरों को देखें। यह केवल शेल की वर्तमान कार्यशील निर्देशिका को लौटाता है जो स्क्रिप्ट को कॉल कर रहा है (जैसे pwd), जो स्क्रिप्ट फ़ाइल स्थित होने की तुलना में कहीं पूरी तरह से भिन्न हो सकती है।
जीडीपी 2

186

File.expand_path File.dirname(__FILE__) इस कमांड को उस फाइल के सापेक्ष डायरेक्टरी लौटा देगा जिसे इस कमांड से कहा जाता है।

लेकिन Dir.pwdकाम निर्देशिका ( pwdआपके टर्मिनल में निष्पादित करने के समान परिणाम ) लौटाता है


3
Dir.pwdके बराबर है pwd -Pexec('pwd -L')टर्मिनल में pwd के बराबर मिलेगा (pwd सामान्यतः बैश बिलिन है, और प्रतीकात्मक लिंक को हल नहीं करता है)।
बैरी केली

1
कृपया अक्सर भूल गए पथनाम
awenkhh

1
एक समस्या है, Dir.pwd उस स्क्रिप्ट की कार्यशील निर्देशिका को प्रिंट करेगा जहां स्क्रिप्ट चलाई गई है - जो आप नहीं चाहते हैं।
ब्रेंडन

हां, यह मानते हुए कि आप bundle exec rspec specडायरेक्टरी '/ प्रोजेक्ट' में कमांड चलाते हैं , जबकि फाइल 'spec / spec_helper.rb' में Dir.pwdअभी भी वैल्यू '/ प्रोजेक्ट' होगी।
हाइवर

59

वर्तमान निष्पादित स्क्रिप्ट के सापेक्ष पथ के लिए, रूबी 2.0 के बाद से आप भी उपयोग कर सकते हैं

__dir__

तो यह मूल रूप से के रूप में ही है

File.dirname(__FILE__)


यह उस कार्यशील निर्देशिका को प्रिंट करेगा जहां स्क्रिप्ट को चलाया गया है जैसा कि @Brandon ने कहा।
aldrien.h

6

यह आपको वर्तमान फ़ाइल की कार्यशील निर्देशिका देगा।

File.dirname(__FILE__)

उदाहरण:

current_file: "/User/nemrow/SITM/folder1/folder2/amazon.rb"

परिणाम: "/ उपयोगकर्ता / निमो / SITM / folder1 / folder2"


1
कृपया ध्यान दें कि कार्यशील निर्देशिका वास्तविक फ़ाइल के समान नहीं होनी चाहिए। इसलिए Dir.pwdऔर आपका सुझाव अलग हो सकता है।
बेसी

4

यदि आप वर्तमान rb फ़ाइल की निर्देशिका का पूर्ण पथ प्राप्त करना चाहते हैं:

File.expand_path('../', __FILE__)

3

इसके माध्यम से आप किसी भी डायरेक्टरी में स्थित किसी भी फाइल का पूर्ण पथ प्राप्त कर सकते हैं।

File.join(Dir.pwd,'some-dir','some-file-name')

यह लौट आएगा

=> "/User/abc/xyz/some-dir/some-file-name"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.