मैं एक टर्मिनल लाइन पर एक उपनाम कैसे सेट करूं?


9

मैं आसानी git-goसे इस टर्मिनल लाइन के लिए एक उपनाम सेट करना चाहता हूं :

git commit -m "init "; git push; git status

इसलिए जब मैं git-go दर्ज करता हूं तो इस लाइन को दर्ज करना चाहिए।

मैं उसे कैसे कर सकता हूँ? मैंने जिन उत्तरों को देखा, वे बिना किसी पैरामीटर्स के केवल कमांड का कवर उर्फ ​​हैं। लेकिन मैं एक अनियंत्रित टर्मिनल लाइन के लिए एक उपनाम सेट करना चाहता हूं।


आपने क्या प्रयास किया? आपने और कौन से प्रश्न पढ़े? askubuntu.com/q/17536/507051 इसे काफी अच्छा समझाता है, वास्तव में आपका सवाल क्या है?
मिठाई

मेरा मुद्दा बाहर के उद्धरणों के लिए एकल के बजाय दोहरे उद्धरण चिह्नों का उपयोग कर रहा था।
फिलिप रेगो

आप इसे बाहर की तरफ दोहरे उद्धरण चिह्नों और अंदर के एकल उद्धरणों का उपयोग करने के आसपास भी कर सकते हैं।
20

जवाबों:


13

आप इसे उसी तरह करते हैं जैसे आप कोई अन्य उपनाम सेट करते हैं।

alias git-go='git commit -m "init "; git push; git status'

वह स्थिति जहां यह मुश्किल हो जाता है , जब कोई अन्य व्यक्ति एक कमांड चलाता है और उस कमांड में तर्क पारित नहीं करता है, और तब भी जब कोई अन्य अलग-अलग कमांड चलाता है ;, लेकिन इसके बजाय जब आप चाहते हैं कि कोई अन्य कमांड लाइन तर्क को स्वीकार करे और उसका उपयोग करे ।

उदाहरण के लिए, उस उपनाम के नाम के बाद आप जो कुछ भी लिखते हैं , वह अंत में चिपकाया जाएगा, और इस तरह तीसरे gitआदेश के बाद कमांड-लाइन तर्क के रूप में पारित किया गया git status। (वास्तव में यह इतना नहीं है कि निम्नलिखित पाठ को अंत में चिपकाया जाता है, जितना कि यह है कि निम्नलिखित पाठ को अकेला छोड़ दिया गया है और उपनाम नाम को इसकी परिभाषा से बदल दिया गया है।)

तो आप बिना किसी तर्क के अपना उपनाम चला सकते हैं, जो काम करता है, और अंतिम आदेश है git status:

git-go

या आप इसे उन तर्कों के साथ चला सकते हैं जिन्हें आप पास करना चाहते हैं git status। उदाहरण के लिए, जब आप इसे इस तरह से चलाते हैं, तो अंतिम कमांड होती है git-status --show-stash:

git-go --show-stash

आप बाश (और अन्य बॉर्न-शैली के गोले) में एक उपनाम के साथ क्या नहीं कर सकते हैं, उपनाम को आदेश-पंक्ति तर्कों को स्वीकार करने और उन्हें अंत की तुलना में कहीं और रखने के लिए है।

उदाहरण के लिए, मान लें कि आप git-goएक ऐसे तर्क को स्वीकार करना चाहते हैं जो इसे प्रतिबद्ध संदेश के लिए उपयोग करता है। आप इसे एक उपनाम के रूप में नहीं लिख पाएंगे। समाधान इसके बजाय इसे शेल फ़ंक्शन के रूप में लिखना होगा:

git-go() { git commit -m "$1"; git push; git status; }

एक खोल समारोह की परिभाषा में, स्थितीय मापदंडों $1, $2और इसी तरह कमांड लाइन तर्क खोल कार्य करने के लिए पारित कर दिया के मूल्यों पकड़ो। उपनाम की कोई कार्यक्षमता नहीं है जो इससे मेल खाती है, क्योंकि उपनाम विस्तार वास्तव में मैक्रो प्रसंस्करण का एक रूप है, बहुत जल्दी हो रहा है, जब शेल एक कमांड को पार्स करता है।

आप निश्चित रूप से, इसे शेल फ़ंक्शन के रूप में लिख सकते हैं, भले ही आपको परिभाषा में स्थितीय मापदंडों का उपयोग करने की आवश्यकता न हो, जैसा कि Videonauth सुझाव देता है


1
इससे भी बेहतर: git-goअपने PATH में नाम की स्क्रिप्ट रखें और git goकाम करेंगे।
डी। बेन नोबल

10

आप इसे अपनी ~/.bash_aliasesफ़ाइल में फ़ंक्शन घोषित कर सकते हैं जैसे:

git-go(){
    git commit -m "init "
    git push
    git status
}

या आप उसी फ़ाइल में एक उपनाम बना सकते हैं जैसे:

alias git-go='git commit -m "init "; git push; git status'

अपने टर्मिनल या फ़ाइल को फिर से खोलने के लिए मत भूलना ( . ~/.bash_aliases) बदलने के बाद।


1
उपनाम के बजाय शेल फ़ंक्शन लिखने का एक लाभ यह है कि किसी को घोंसले के उद्धरण की आवश्यकता नहीं है। यह जवाब इस प्रकार केंद्रीय समस्या को संबोधित करता है, जिसमें ओपी सीधे तौर पर मेरी तुलना में अधिक था।
एलियाह कगन

@EliahKagan दोनों उस प्रश्न के लिए ठीक हैं, हालांकि आपका अधिक है। तुम्हें वापस देखकर अच्छा लगा।
विदेहोनथ

4

जैसा कि आप gitआदेशों के साथ काम कर रहे हैं , आप विशेष रूप से एक उपनाम जोड़ने के लिए वाक्यविन्यास जानना चाह सकते हैंgit :

git config --global alias.go '!sh -c "git commit -m \"init\"; git push; git status"'

यह आपके स्थानीय gitकॉन्फ़िगरेशन (पर) में एक नया उपनाम जोड़ देगा~/.gitconfig ) में देगा और आपको जारी करने की अनुमति देगा

git go

जब एक gitभंडार के अंदर । जब भी आप दौड़ते हैंgit go एक शेल इसे लागू किया जाता है और कमांड git commit -m "init"; git push; git statusको इसे पास किया जाता है।

देखें Git documentaion अधिक जानकारी के लिए।


3

यह एक उद्धरण समस्या थी। मैंने यह कोशिश की थी:

alias="git commit -m "init "; git push; git status"

लेकिन यह त्रुटि मिली:

bash: ; git push; git status: command not found

मुझे वह त्रुटि मिली क्योंकि मैं गलत तरीके से नेस्टेड उद्धरण का उपयोग कर रहा था। यहाँ सही सिंटैक्स है:

alias='git commit -m "init "; git push; git status'

या:

alias="git commit -m 'init '; git push; git status"

या बिना उद्धरण के अगर कोई सफ़ेद संदेश में जगह नहीं:

alias="git commit -m init; git push; git status"

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

मैं मैन्युअल रूप से इस लाइन को पेस्ट करता था और मैं अंतरिक्ष के बाद एक संदेश जोड़ देता था, लेकिन इसका कोई मतलब नहीं है इसलिए मैंने इसे निकाल लिया।
फिलिप रीगो

1
उस मामले में, आपको उद्धरण की आवश्यकता नहीं है init; शेल व्यवहार करता है 'init', "init"और initवही। (तो आप मूल संस्करण को वापस रखना चाहते हैं और नया संस्करण भी दिखा सकते हैं, उस स्थिति को स्पष्ट करने के लिए जहां नेस्टेड कोट्स की आवश्यकता है।) शेष संदेश को जोड़ने में सक्षम होने के कारण, आप इसे कमांड-लाइन के रूप में पारित कर सकते हैं। तर्क यदि (जैसा कि वीडियोनौथ और मेरे उत्तरों में दिखाया गया है) तो आपने एक उपनाम के बजाय एक फ़ंक्शन परिभाषित किया। उदाहरण के लिए, आप परिभाषित कर सकते हैं git-go() { git commit -m "init $1"; git push; git status; }(जो कि मेरे उत्तर में है लेकिन "init $1"सिर्फ इसके बजाय "$1")।
एलियाह कगन

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