जो आप करने की कोशिश कर रहे हैं वह असंभव है। या बेहतर: आप इसे करने की कोशिश कैसे कर रहे हैं असंभव है।
आपका बैश कमांड गलत है। bash -s command
command
निष्पादित नहीं करता है। यह सिर्फ $1
में स्ट्रिंग "कमांड" को संग्रहीत करता है और फिर आपको प्रॉम्प्ट पर छोड़ देता है। यही कारण है कि पाइथन लिपि स्थिर हो रही है। आप क्या करना चाहते हैं bash -c command
है।
आप .bashrc
क्यों स्रोत करते हैं? क्या यह सिर्फ .bash_aliases
स्रोत के लिए पर्याप्त नहीं होगा?
भले ही आपको अपना बैश कमांड मिला हो, तो परिवर्तन केवल पायथन से शुरू होने वाले बैश सत्र में प्रभावी होंगे। एक बार जब बैश सत्र बंद हो जाता है, और आपकी पायथन लिपि पूरी हो जाती है, तो आप अपने मूल बैश सत्र पर वापस आ जाते हैं। पाइथन से शुरू किए गए बैश सत्र में सभी परिवर्तन खो गए हैं।
हर बार जब आप वर्तमान बैश सत्र में कुछ बदलना चाहते हैं, तो आपको इसे मौजूदा बैश सत्र के अंदर से करना होगा। आपके द्वारा बैश (सिस्टम कमांड, पायथन स्क्रिप्ट्स, यहां तक कि बैश स्क्रिप्ट्स) से चलने वाले अधिकांश आदेश एक और प्रक्रिया को जन्म देंगे, और जो कुछ भी आप उस अन्य प्रक्रिया में करते हैं, वह आपके पहले बैश सत्र को प्रभावित नहीं करेगा।
source
एक बैश बिल्टिन है जो आपको वर्तमान में चल रहे बैश सत्र के अंदर कमांड निष्पादित करने की अनुमति देता है, बजाय किसी अन्य प्रक्रिया को बढ़ाने और वहां कमांड चलाने के बजाए। एक बैश फ़ंक्शन को परिभाषित करना वर्तमान में चल रहे बैश सत्र के अंदर कमांड निष्पादित करने का एक और तरीका है।
सोर्सिंग और निष्पादन के बारे में अधिक जानकारी के लिए this answer देखें।
क्या आप को प्राप्त करने के लिए आप क्या
अपने अजगर स्क्रिप्ट को संशोधित चाहते हैं तो बस .bash_aliases
के लिए आवश्यक परिवर्तन करने के लिए कर सकते हैं।
अपनी पायथन स्क्रिप्ट चलाने के लिए एक बैश स्क्रिप्ट तैयार करें और फिर स्रोत .bash_aliases
।
#i am a bash script, but you have to source me, do not execute me.
modify_bash_aliases.py "[email protected]"
source ~/.bash_aliases
कि स्क्रिप्ट
alias add_alias='source modify_bash_aliases.sh'
अब
स्रोत के लिए जब आप अपने बैश में add_alias some_alias
टाइप का संकेत यह source modify_bash_aliases.sh
से बदल दिया जाएगा और उसके बाद मार डाला अपने .bashrc
उपनाम जोड़ना। चूंकि source
एक बैश बिल्टिन है, इसलिए स्क्रिप्ट के अंदर के आदेश वर्तमान में चल रहे बैश सत्र के अंदर निष्पादित किए जाएंगे। पायथन स्क्रिप्ट अभी भी एक और प्रक्रिया में चलेगी, लेकिन बाद में source
कमांड आपके वर्तमान चल रहे बैश सत्र के अंदर चलाएगा।
एक और तरीका
अपने अजगर स्क्रिप्ट को संशोधित सिर्फ .bash_aliases
के लिए आवश्यक परिवर्तन करने के लिए।
अपनी पायथन स्क्रिप्ट चलाने के लिए एक बैश फ़ंक्शन तैयार करें और फिर .bash_aliases
स्रोत बनाएं।
add_alias() {
modify_bash_aliases.py "[email protected]"
source ~/.bash_aliases
}
अब आप इस तरह फ़ंक्शन को कॉल कर सकते हैं: add_alias some_alias
आपकी प्रतिक्रिया के लिए धन्यवाद। समानांतर में मैंने कुछ शोध किया है, और हाँ, आप सही हैं, जो मैं चाहता हूं वह काफी संभव नहीं है। कामकाज एक बैश स्क्रिप्ट लिखना है और अगर यह आवश्यक है तो इसे चलाने के लिए है। लेकिन मैं सोच रहा था कि रनटाइम पर पर्यावरण को संशोधित करना खतरनाक हो सकता है, खासकर अगर सर्वर पहले से ही "गहन" स्क्रिप्ट चला रहा है। –
@Andrei मैंने स्रोत करने के लिए एक बैश स्क्रिप्ट का उपयोग करने का प्रयास किया, लेकिन न तो काम किया। – peacepassion