Zsh में, कोष्ठक के माध्यम से बनाई गई एक उपधारा में आदेशों का उपयोग करने के लिए एक rcfile खट्टा हो सकता है जो उपनाम हो सकता है, केवल तब उपलब्ध होता है जब विशिष्ट निर्देशिकाओं को इसमें जोड़ा जाता है PATH, आदि:
~ » /bin/zsh -c "workon"
zsh:1: command not found: workon
------------------------------------------------------------
~ » /bin/zsh -c "source ~/.zshrc; workon"
env1
env2
env3
... (expected output)
हालांकि, एक ही मार के साथ सच नहीं है:
~ » /bin/bash -c "workon"
/bin/bash: workon: command not found
------------------------------------------------------------
~ » /bin/bash -c "source ~/.bashrc; workon"
/bin/bash: workon: command not found
------------------------------------------------------------
~ » bash
sean@helium:~$ workon
env1
env2
env3
... (expected output)
वहाँ किसी भी तरह से एक bash उपधारा एक rcfile स्रोत कर सकते हैं?
"XY समस्या" प्रतिक्रियाओं पर एक सिर शुरू करने के लिए, यह एक स्क्रिप्ट के लिए है in:
#!/bin/zsh
(source ~/.zshrc; cd $1; ${@:2})
मेरे पास परियोजनाओं से भरी एक निर्देशिका है (git का उपयोग करके) जहां मैं अक्सर भूल जाता हूं अगर मैंने कुछ भी नहीं छोड़ा है, तो inमुझे जल्दी से लिखने की अनुमति देता है $ in ProjectDir/ git status, बजाय $ (cd ProjectDir; git status)(पहले वाले को बाद की तुलना में टाइप करना आसान लगता है)।
अधिमानतः, मैं इस स्क्रिप्ट को बैश के साथ प्रयोग करना चाहूंगा (यही कारण है कि मैं पूछता हूं, भले ही यह वर्तमान में zsh के साथ काम करता है)।
workonवास्तव में एक एक्सपोर्टेड फंक्शन है, जिसे पायथन पैकेज का हिस्सा कहा जाता है virtualenvwrapper, इसे माफ़ करने के लिए मेरी माफ़ी एक उपनाम है।
(…)अपनी inस्क्रिप्ट में ज़रूरत नहीं है (यदि आप इसे चलाते हैं bash)।
inअंदर से दौड़ सकते हैं । यदि यह व्याख्या के अनुसार काम करता है , तो आपको इसे बदलने की आवश्यकता क्यों है? bash$PATHzsh
-fसे चूक गया exportथा workon- यह होना चाहिए था workon() { ...; }; export -f workon। निर्यात किए गए फ़ंक्शंस किसी भी उपधारा में काम करना चाहिए, इसलिए पहले workonसे चलाने की आवश्यकता के बिना पाया जाना चाहिए ~/.bashrc( PATHनिर्यात किया जाता है)। इसके साथ या समतुल्य परिभाषा, bash -c workonपर्याप्त होनी चाहिए, हालांकि मैं यह नहीं देखता कि आप इसका उपयोग क्यों करेंगे bash -c। वैसे, आपको दूसरी पंक्ति के चारों ओर कोष्ठक की आवश्यकता नहीं है in, क्योंकि स्क्रिप्ट एक सबशेल में चलती हैं (जब तक कि इसे लागू नहीं किया जाता है source), और आपको उप-स्तर के आगे के स्तर की आवश्यकता नहीं है।
workon() { ...; }; export workon। वैकल्पिक रूप से,workonनिर्देशिकाओं में से एक में एक स्क्रिप्ट बनाएं$PATH।