2011-04-06 18 views
9

क्या कोई तरीका है कि मैं pwdalias में .zshrc फ़ाइल में प्राप्त कर सकता हूं? मैं निम्नलिखित की तरह कुछ करने की कोशिश कर रहा हूं:`alias` में 'pwd` प्राप्त करें?

alias cleanup="rm -Rf `pwd`/{foo,bar,baz}" 

यह बाश में ठीक काम करता था; pwd हमेशा निर्देशिका है जो मेरे पास cd 'डी है, हालांकि zsh में ऐसा लगता है कि इसका मूल्यांकन किया जाता है जब .zshrc फ़ाइल पहली बार लोड होती है और हमेशा मेरी होम निर्देशिका के रूप में रहती है। मैंने वास्तव में सरल alias सेटअप के साथ उपयोग करके परीक्षण किया है, लेकिन यह कभी भी नहीं बदलता है।

मेरे पास यह परिवर्तन कैसे हो सकता है, ताकि उपनिर्देशिका से alias को कॉल करना हमेशा उस उपदिर के रूप में मूल्यांकन करता है?

संपादित करें: सुनिश्चित नहीं है कि इससे मदद मिलेगी, लेकिन मैक पर ओह-माय-जेश के माध्यम से zsh का उपयोग कर रहा हूं।

+0

एचएम, इसके बजाय फ़ंक्शन का उपयोग करने में कुछ भी गलत है? 'फ़ंक्शन pwdtestf() {echo 'pwd'}' काम करने के लिए प्रतीत होता है? –

+0

@UlrichSchwarz pwd केवल उपनाम स्क्रिप्ट के बजाय फ़ंक्शन में काम करता है। मेरा एनएनवी: iTerm2 + ohmyzsh – JohnWatsonDev

उत्तर

28

जब आपका .zshrc लोड होता है, तो alias कमांड का मूल्यांकन किया जाता है। कमांड में दो शब्द होते हैं: एक कमांड नाम (बिल्टिन alias), और एक तर्क, जो cleanup="rm -Rf `pwd`/{foo,bar,baz}" का विस्तार करने का परिणाम है। चूंकि बैकक्वॉट्स डबल कोट्स के बीच इंटरपोलेट किए जाते हैं, इसलिए यह तर्क cleanup=rm -Rf /home/unpluggd/{foo,bar,baz} (यह एक एकल खोल शब्द है) जहां /home/unpluggd उस समय की वर्तमान निर्देशिका है।

यदि आप कमांड परिभाषित करते समय इंटरपोलेशन से बचना चाहते हैं, तो इसके बजाय सिंगल कोट्स का उपयोग करें। यह लगभग हमेशा होता है जो आप उपनाम के लिए चाहते हैं।

alias cleanup='rm -Rf `pwd`/{foo,bar,baz}' 

हालांकि यह अनिवार्य रूप से जटिल है। फ़ाइल नामों के सामने आपको `pwd/` की आवश्यकता नहीं है! बस लिखने

alias cleanup='rm -Rf -- {foo,bar,baz}' 

(-- की जरूरत है अगर foo एक - के साथ शुरू हो सकता है, से बचने के लिए अपने rm के लिए एक विकल्प के रूप में पार्स किया जाता), ब्रेसिज़ अब जरूरत के बाद से सरल किया जा सकता है जो:

alias cleanup='rm -Rf -- foo bar baz' 
+3

यह आश्चर्यजनक उत्तर है जो आपको केवल एसओ पर मिलता है! धन्यवाद गिल्स! –

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

  • कोई संबंधित समस्या नहीं^_^