बैश फंक्शन बनाने की कोशिश की जा रही है जो सभी तर्कों को एकत्र करता है और उद्धरण देता है, लेकिन अगर कोई कोष्ठक या एकल उद्धरण शामिल हैं तो यह काम नहीं करता है


2

मैंने देखा कि "गिट कमिट" के लिए निम्नलिखित शॉर्टकट कहीं सुझाए गए हैं:

function gc {
  git commit -m "$*"
}

यह आपको उद्धरण या कुछ भी बिना शेल में प्रतिबद्ध संदेश इनलाइन लिखने की अनुमति देने वाला है। पसंद:

gc This is a commit message

समस्या यह है कि यह काम नहीं करता है अगर प्रतिबद्ध संदेश में कोष्ठक या उद्धरण शामिल हैं। (और मैं अपने प्रतिबद्ध संदेशों में बहुत सारे कोष्ठक / उद्धरण का उपयोग करता हूं।) क्या कोई भी व्यक्ति बैश स्क्रिप्टिंग की कला में पारंगत हो सकता है?

जवाबों:


3

मुझे नहीं लगता कि यह आपके फ़ंक्शन के साथ एक समस्या है (या, अधिक सटीक रूप से, मुझे नहीं लगता कि यह एक समस्या है जिसे आप अपने फ़ंक्शन में हल कर सकते हैं)। इससे पहले कि यह आपके फ़ंक्शन को कॉल करता है, bash कमांड लाइन (कोटेड स्ट्रिंग्स, विभिन्न ब्रैकेट एक्सप्रेशंस आदि की व्याख्या सहित) करता है अपने फ़ंक्शन को कॉल करने का निर्णय लेता है । इसलिए जब आप कुछ पसंद करते हैं gc fixed Greg's bug, बैश की आवश्यकता होगी कि आप फंक्शन को निष्पादित करने से पहले उद्धृत स्ट्रिंग बंद कर दें; जब आप टाइप करें gc printf("%s", integervar) not a good idea, बैश कोष्ठक के बारे में शिकायत करेंगे और कभी भी यह तय करने की बात तक नहीं करेंगे कि क्या आदेश / कार्य / जो भी अनुरोध किया जा रहा था।

मैं उपयोग करने की बात मानता हूं $* कमांड लाइन पर मेमो को उद्धृत करने से बचने के लिए था, लेकिन यह केवल संदेश में रिक्त स्थान रखने से बचा जाता है। यदि संदेश में अन्य शेल मेटाचैकर हैं, तो आप जरूर उन्हें उचित रूप से उद्धृत या बचाना:

gc "fixed Greg's bug"
gc 'printf("%s", integervar) not a good idea'
gc 'fixed this & deferred that'

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