आप जो करना चाह रहे हैं वह संभव नहीं है। इसका कारण यह है कि एक POSIX सिस्टम (लिनक्स, OSX, आदि) में, एक बच्चे की प्रक्रिया एक मूल प्रक्रिया के वातावरण को संशोधित नहीं कर सकती है। इसमें मूल प्रक्रिया की कार्यशील निर्देशिका और पर्यावरण चर को संशोधित करना शामिल है।
जब आप कमांडलाइन पर होते हैं और आप अपनी नोड स्क्रिप्ट को निष्पादित करने के लिए जाते हैं, तो आपकी वर्तमान प्रक्रिया ( bash
और zsh
, जो भी हो) एक नई प्रक्रिया को जन्म देती है, जिसमें इसका स्वयं का वातावरण होता है, आमतौर पर आपके वर्तमान वातावरण की प्रतिलिपि (सिस्टम कॉल के माध्यम से इसे बदलना संभव है) ; लेकिन यह इस उत्तर के दायरे से परे है), उस प्रक्रिया को पूर्ण अलगाव में करने के लिए जो कुछ भी करने की आवश्यकता है उसे करने की अनुमति देता है। जब उपप्रकार बाहर निकलता है, तो नियंत्रण को आपके शेल की प्रक्रिया में वापस सौंप दिया जाता है, जहां पर्यावरण प्रभावित नहीं हुआ है।
इसके कई कारण हैं, लेकिन एक के लिए, कल्पना करें कि आपने पृष्ठभूमि में एक स्क्रिप्ट निष्पादित की (के माध्यम से ./foo.js &
) और जैसे-जैसे यह चलता गया, यह आपकी कार्यशील निर्देशिका को बदलना या आपके ओवरराइड करना शुरू कर दिया PATH
। यह एक बुरा सपना होगा।
यदि आपको अपने शेल की कार्यशील निर्देशिका को बदलने के लिए कुछ क्रियाएं करने की आवश्यकता है, तो आपको अपने शेल में एक फ़ंक्शन लिखना होगा। उदाहरण के लिए, यदि आप बैश चला रहे हैं, तो आप इसे अपने में डाल सकते हैं ~/.bash_profile
:
do_cool_thing() {
cd "/Users"
echo "Hey, I'm in $PWD"
}
और फिर यह अच्छी बात है:
$ pwd
/Users/spike
$ do_cool_thing
Hey, I'm in /Users
$ pwd
/Users
यदि आपको इसके अलावा और अधिक जटिल चीजें करने की आवश्यकता है, तो आप हमेशा उस फ़ंक्शन से अपने नोडज स्क्रिप्ट को कॉल कर सकते हैं।
यह एकमात्र तरीका है जिससे आप वह कर सकते हैं जो आप करने की कोशिश कर रहे हैं।