क्या मैं बैश स्टॉप पार्सिंग कर सकता हूं और एक निश्चित उपनाम को मान्य कर सकता हूं?


8

मैं फेडोरा 25 का उपयोग कर रहा हूं, और निम्नलिखित उपनाम को मेरी बैश प्रोफ़ाइल में जोड़ दिया है:

alias releasenotes="dnf updateinfo --refresh info `dnf check-update | cut -d '.' -f 1 | xargs` | less"

(मैं https://bugzilla.redhat.com/show_bug.cgi?id=1405191 केdnf updateinfo info कारण स्ट्रेट-अप का उपयोग नहीं कर सकता )

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

क्या बाश बनाने का कोई तरीका नहीं है कि हम उपनामों को पार्स और मान्य करने की कोशिश न करें - या सिर्फ एक?

जवाबों:


9

मेरा सबसे अच्छा अनुमान है कि आपको उपनाम की परिभाषा के आसपास एकल उद्धरण का उपयोग करना चाहिए ।

मुझे पता है कि दोहरे उद्धरण चिह्नों का उपयोग करते समय, शेल वेरिएबल्स को उनकी सामग्री के साथ उपनाम की परिभाषा चरण (जैसे आपने कहा कि पार्सिंग और मान्य करना) और बैकटिक्स या शेल प्रतिस्थापन जैसे $ (कमांड) से प्रतिस्थापित किया जाता है।

एक बेहतर स्पष्टीकरण इस यूनिक्स एसई प्रश्न में है !

यदि वह शीघ्र लोड को फिर से तेज करने में मदद नहीं करता है, तो उपनाम के बजाय शेल फ़ंक्शन को परिभाषित करें।

संपादित करें: उल्लिखित क्विकोटिक जैसे दोहरे उद्धरणों में कट तर्क को स्वैप करना न भूलें।


यह किया! आपने पहले उत्तर दिया, इसलिए आपको श्रेय मिलता है।
52इकादर्ट

9

bashआपके उद्धृत स्ट्रिंग की व्याख्या कर रहा है, और यह व्याख्या एम्बेडेड dnf check-updateकमांड को निष्पादित करती है । यह निष्पादन वह है जो अलियास परिभाषा के दौरान समय लेता है, न कि मुख्य dnf updateinfoआज्ञा जो आप अलियासिंग कर रहे हैं। इसके आधार पर एक वंचित उदाहरण का प्रयास करें sleepऔर ध्यान दें कि कैसे alias5 सेकंड लगते हैं:

alias sleep5="echo 'wake' ; `sleep 5` ; echo 'done'"

व्याख्या से बचने के लिए एकल-उद्धरण का उपयोग करें:

alias releasenotes='dnf updateinfo --refresh info `dnf check-update | cut -d "." -f 1 | xargs` | less'

cutडबल-कोट्स में तर्क को स्वैप करना न भूलें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.