मैं एक स्क्रिप्ट का उपयोग करता हूं (जो कि मेरे पास पहुंच नहीं है) जो पर्यावरण को स्थापित करने के लिए एलियंस का एक गुच्छा बनाता है। मैं अपने वातावरण को सेट करने के लिए एक बैश फ़ंक्शन बनाना चाहूंगा, लेकिन ऐसा लगता है कि उपनाम फ़ंक्शन बॉडी से जीवित नहीं हैं।
यहाँ एक न्यूनतम उदाहरण है:
# aliases.sh
alias fooAlias='echo "this will never work!"'
।
# .bashrc
function setupLotsOfThings() {
source aliases.sh
fooAlias
}
।
अब, अगर मैं केवल aliases.shअंतःक्रियात्मक रूप से स्रोत हूं, तो चीजें अपेक्षित रूप से काम करती हैं:
[mycomputer]~/ $ source aliases.sh
[mycomputer]~/ $ fooAlias
this will never work!
हालाँकि, अगर मैं इसके बजाय मेरे .bashrc में परिभाषित फ़ंक्शन को कॉल करता हूं, तो यह अपनी परिभाषा के स्रोत के बाद उपनाम को नहीं पहचानता है:
[mycomputer]~/ $ setupLotsOfThings
-bash: fooAlias: command not found
यहाँ क्या हो रहा है? क्या ऐसा कुछ aliasहै जो किसी फ़ंक्शन में उपयोग किए जाने पर कमांड के दायरे के बारे में याद आ रहा है?
संपादित करें: जो कुछ मैं पूरा करने की कोशिश कर रहा हूं, उस पर कुछ प्रकाश डालने के लिए मैं न्यूनतम उदाहरण से परे कुछ विवरण जोड़ूंगा।
अपने काम के लिए मैं एक क्लस्टर और / या ग्रिड पर बहुत सारे सॉफ्टवेयर विकसित और चलाता हूं। मेरे पास कई परियोजनाएं हैं जिनके लिए पूरी तरह से अलग वातावरण की आवश्यकता होती है, जैसे कि अलग-अलग जीसीसी संस्करण, विशिष्ट सॉफ़्टवेयर रिलीज़, कॉन्फ़िगरेशन और डेटा पेट्स, और विभिन्न पर्यावरण चर। व्यवस्थापक विभिन्न कार्यों को सेट करने के लिए स्क्रिप्ट प्रदान करते हैं, आमतौर पर शेल फ़ंक्शन या उपनामों को परिभाषित करके, जो अन्य कार्यों या उपनामों को लागू करते हैं या अन्य स्क्रिप्ट चलाते हैं। मेरे लिए, यह एक ब्लैक बॉक्स है।
मैं अपने विभिन्न वातावरणों को एक ही कमांड के साथ सेटअप करना चाहता हूं। वर्तमान में, मैं कुछ ऐसा करता हूं:
[mycomputer]~/ $ source /some/environment/setup/script.sh
[mycomputer]~/ $ aliasToSetupSomeSoftwareVersion #this was defined in the above
[mycomputer]~/ $ anotherAliasForOtherSoftware
[mycomputer]~/ $ source /maybe/theres/another/script.sh
[mycomputer]~/ $ runSomeOtherSetup # this was defined in the new script
इन आदेशों को आम तौर पर क्रम में चलाना पड़ता है। मेरा विचार मूल रूप से उपरोक्त पंक्तियों को एक फ़ंक्शन ब्लॉक में कॉपी करना था, लेकिन मूल उदाहरण से पता चलता है, कि बस काम नहीं करता है। वैकल्पिक workarounds स्वागत से अधिक कर रहे हैं!