2012-11-06 4 views
20

कहें कि मेरे पास निम्न उपनाम हैं।खोल शुरू होने पर स्टेटमेंट स्टेटमेंट से बैश उपनाम को रोकें

alias pwd_alias='echo `pwd`' 

यह उपनाम "गतिशील" नहीं है। जैसे ही खोल शुरू होता है, यह pwd का मूल्यांकन करता है। क्या उपनाम के रनटाइम तक टिक्स में अभिव्यक्ति के मूल्यांकन में देरी करने के लिए वैसे भी है?

+9

एकल उद्धरणों को ऐसा करना चाहिए (और वे मेरे सिस्टम पर करते हैं)। –

+1

'alias pwd_alias = 'echo $ PWD'' –

उत्तर

24

आप वास्तव में क्या चाहते हैं एक उपनाम के बजाय एक समारोह है।

pwd_alias() { 
    echo "$PWD" 
} 

एलियंस टेक्स्ट को प्रतिस्थापित करने से ज्यादा कुछ नहीं करते हैं। जटिलता के साथ कुछ भी एक समारोह के लिए कहते हैं।

+0

आप इस कार्य को उपनाम के रूप में काम करने के लिए कहां रखते हैं?/Usr/local/bin में फ़ाइल में, या आप इसे .bashrc में डाल सकते हैं? – dgilperez

+2

@dgilperez '~/.bashrc' ठीक है। – jordanm

+0

यह फ़ंक्शन सिंटैक्स मेरे लिए काम नहीं करता था। मुझे 'फ़ंक्शन pwd_alias { गूंज "$ PWD" } ' –

0

मुझे विश्वास नहीं है कि आप खोल शुरू होने से मूल्यांकन को बदल सकते हैं। चूंकि ऊर्फ बनाने की प्रक्रिया खोलने पर चलती है pwd का मूल्यांकन तब किया जाता है। 0xआउटपुट को प्रतिध्वनि की आवश्यकता के बिना पिछली टिकों के बिना आप केवल pwd चलाने के लिए उपनाम बदल सकते हैं। इसका समाधान करने का एक आसान तरीका है अगर आप उपनाम का उपयोग करने से नहीं बदलना चाहते हैं तो अपने पथ में एक उपनाम को खोल स्क्रिप्ट में बदलना है।

#!/bin/bash 
pwd 
2

जैसा कि जॉर्डनम ने कहा, उपनाम टेक्स्ट को प्रतिस्थापित करने से ज्यादा कुछ नहीं करते हैं।
यदि आप गूंज द्वारा विस्तारित पीडब्ल्यूडी के आउटपुट होने के लिए गूंज की तर्क चाहते हैं, तो मैं आपके प्रश्न को समझ नहीं पा रहा हूं।
आप गूंज के तर्क चाहते हैं `होने की backquotes साथ pwd` रखा, यह वास्तव में संभव है, उदाहरण के लिए:

alias a="echo '\`pwd\`'" 

तो, अगर बजाय गूंज की आप कुछ जो अपनी ही में backquote विस्तार करता है रनटाइम, हो सकता है कि आप यही चाहते हैं।

+3

उपर्युक्त काम नहीं करता है, आपको सिंगल कोट्स को हटाने की आवश्यकता है: 'alias a = "echo \\' pwd \\ '" ' – Anake

+0

हां यह मेरे काम के अनुसार काम करता है, जब आप शैल इकोज़' pwd' बैकक्वॉट रखा गया है। –

संबंधित मुद्दे