2013-10-24 7 views
6

के साथ वर्तमान निर्देशिका बदलें मैं node.js. में कमांड लाइन उपयोगिता लिखने की कोशिश कर रहा हूं। सुविधाओं में से एक के रूप में इसे खोल की वर्तमान कार्यशील निर्देशिका को बदलना चाहिए जिसे इसे से बुलाया गया था। cd के node.js संस्करण की तरह कुछ। क्या यह हासिल करना संभव है? यदि हां, तो कैसे?नोड

 


 

स्पष्ट करने के लिए, मैं स्क्रिप्ट चलाने से टर्मिनल विंडो में वर्तमान निर्देशिका को बदलने में सक्षम होना चाहते हैं।

/some/path> ... 
/some/path> nodecd /other/path 
/other/path> ... 

समस्या यह है कि स्क्रिप्ट निर्देशिका के लिए process.chdir() काम करता है, शैल निर्देशिका के लिए नहीं। मुझे किसी भी तरह से नोड स्क्रिप्ट के लिए बैश आमंत्रण के माध्यम से वर्तमान खोल को पार करने में सक्षम होना चाहिए, और स्क्रिप्ट के भीतर उस खोल के पथ को बदलना - एक सबहेल बनाना समस्या को हल नहीं करेगा।

उत्तर

7

संक्षेप में: आप नहीं कर सकते। कार्य निर्देशिका किसी प्रक्रिया के संदर्भ तक सीमित है (और शायद बाल प्रक्रियाएं, लेकिन निश्चित रूप से मूल प्रक्रिया नहीं)। तो आपकी नोड प्रक्रिया का सीडब्ल्यूडी आपकी खोल प्रक्रिया में वापस प्रचार नहीं कर सकता है।

cd "$(node app)" 

एक साधारण परीक्षण मामला::

// app.js 
console.log('/tmp'); 

एक आम चाल अपने नोड एप्लिकेशन stdout के लिए कार्यशील निर्देशिका प्रिंट है, और अपने खोल इस तरह अपने नोड अनुप्रयोग चलाने के लिए है और यदि आप इसके लिए एक खोल उपनाम/कार्य बनाते हैं, तो यह अपेक्षाकृत दर्द रहित होना चाहिए।

4

यह स्पष्ट करने के लिए, आप मूल प्रक्रिया के pwd को नहीं बदल सकते हैं। हालांकि आप कार्यशील निर्देशिका बदल सकते हैं और उस फ़ोल्डर में खोल खोल सकते हैं।


आप process.chdir() उपयोग करने की आवश्यकता:

console.log('Starting directory: ' + process.cwd()); 
try { 
    process.chdir('/tmp'); 
    console.log('New directory: ' + process.cwd()); 
} 
catch (err) { 
    console.log('chdir: ' + err); 
} 

यह उदाहरण मैनुअल से लिया जाता है। Here you can find the manual

+0

धन्यवाद, लेकिन यह समस्या का समाधान नहीं करता है। यह केवल एससीआरआईपीटी कार्यशील निर्देशिका को बदलता है, जबकि मुझे उस शेल की निर्देशिका को बदलने की आवश्यकता है जिसमें स्क्रिप्ट लागू की गई थी। अतिरिक्त स्पष्टीकरण देखें। –

+5

यह असंभव है। एक बच्चा अपने पिता के पर्यावरण को नहीं बदल सकता है – hek2mgl