bashrc आलसी प्रतिस्थापन


10

रन टाइम के दौरान प्रतिस्थापन~/.bashrc का मूल्यांकन$() करने के लिए किसी को उपनाम कैसे मिलता है , इसके बजाय ~ / .bashrc निष्पादित किया जाता है (जब एक टर्मिनल खोलते हैं)?

मैं अक्सर यह आदेश चलाता हूं कि मैं इसके लिए एक उपनाम जोड़ना चाहूंगा:

svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff

हालाँकि, जब मैं इसे ~/.bashrcएक उपनाम के रूप में जोड़ता हूं , तो मैं देखता हूं कि मूल्यांकन उन मूल्यों के लिए कठिन-कोडित हैं जो मैंने उस समय खोला था जब मैंने टर्मिनल खोला था:

$ alias
alias svnbranch='svn diff -r 178184:HEAD svn+ssh://branches/t4252 | colordiff'

अगर मैं एक टर्मिनल खोलता हूँ ~तो मुझे त्रुटियाँ मिलती हैं:

svn: E155007: '/home/dotancohen' is not a working copy
svn: E155007: '/home/dotancohen' is not a working copy
svn: E155007: '/home/dotancohen' is not a working copy
svn: E155007: '/home/dotancohen' is not a working copy
$ alias
alias svnbranch='svn diff -r :HEAD  | colordiff'
$

मैंने उर्फ ​​के इन दो रूपों की कोशिश की है ~/.bashrc, वे दोनों एक ही प्रभाव है (जैसा कि मुझे उम्मीद थी):

alias svnbranch="svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff"
alias svnbranch="svn diff -r `svn info | grep ^Revision | awk {'print $2'}`:HEAD `svn info | grep ^URL | awk {'print $2'}` | colordiff"

रन टाइम पर प्रतिस्थापन के ~/.bashrcमूल्यांकन के लिए किसी को उपनाम कैसे मिलता है$() ?

इसके अतिरिक्त, Google में इस स्थिति की खोज कोई कैसे करेगा ? मैंने "bashrc प्रतिस्थापन", "bashrc आलसी प्रतिस्थापन", और अन्य प्रमुख वाक्यांशों पर Google के लिए प्रयास किया है, लेकिन मुझे इस बारे में कुछ नहीं मिला है कि मुझे क्या लगता है कि जानकारी खोजने के लिए एक सामान्य पर्याप्त मुद्दा होना चाहिए।


2
यह एक उपनाम क्यों है? इसे एक शेल स्क्रिप्ट में ले जाएं और इसके साथ किया जाए। अधिकांश * ix प्रकार सिस्टम में डाल दिया $HOME/binजाता है PATHयदि आपके पास इन दिनों ऐसी कोई निर्देशिका है।
वारेन यंग

@WarrenYoung: आप सही हैं, यह विशेष उदाहरण एक स्क्रिप्ट हो सकता है। हालाँकि, मैं अभी भी उत्तर जानना चाहूंगा क्योंकि मैं अन्य चीजों के लिए उपनाम पसंद करता हूं और मैं निश्चित रूप से इसमें भाग लूंगा। मैं आपके सवाल को सामान्य कर सकता हूं कि "बैश उपनाम का समर्थन क्यों करता है जब कोई भी स्क्रिप्ट हो सकती है।"
dotancohen

क्यों होता है पतन? मैं प्रश्न को कैसे सुधार सकता हूं? मैंने उदाहरण दिए हैं, असफल प्रयास, और यहां तक ​​कि उन कीफ्रेसेस पर भी जिन्हें मैंने Google पर करने की कोशिश की थी।
dotancohen

@dotancohen: मुझे लगता है कि आपको अलग से पूछना चाहिए। मैं एक आंशिक जवाब यहां देंगे: alias cdp="cd ~/projects"। एक शेल स्क्रिप्ट में ऐसा नहीं कर सकते।
वारेन यंग

जवाबों:


11

विशेष वर्णों के प्रसंस्करण को दबाने के लिए एकल उद्धरण का उपयोग करें । आप यह भी कर सकता है बैकस्लैश रों। $

एक जटिल आदेश के लिए आप किसी भी मामले में एक फ़ंक्शन का उपयोग करके संभवतः बेहतर होते हैं, जिसे किसी भी भागने की आवश्यकता नहीं होती है और पढ़ना और संपादित करना आसान होता है:

svnbranch() {
    svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff
}

आप एक समारोह को परिभाषित कर सकते हैं कहीं भी आप एक उपनाम को परिभाषित कर सकते हैं।


2
awkएक पैटर्न स्थान है और साथ ही awk '/^Revision/{ print ...}' इस मामले में grep की कोई आवश्यकता नहीं है।
वैलेंटाइन बजरमी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.