2013-08-08 7 views
6

समाप्त करने के लिए मापदंडों मैं Git बैश v1.8.1 उपयोग कर रहा हूँ, कुछ अन्य नामों (परीक्षण के लिए) के साथ:Git उर्फ ​​appending

[alias] 
    ekko = !echo $1 && echo $1 
    ekko2 = !sh -c 'echo $1 && echo $1' 

लेकिन जब मैं उन्हें चलाने के लिए, मैं देख रहा हूँ:

> git ekko master 
master 
master master 

और:

> git ekko2 master 
(blank line) 
(blank line) 

मेरे इच्छित व्यवहार है:

> git ekko master 
master 
master 

मैं अन्य नामों पर काफी नई हूँ - मैं सुनिश्चित करने के लिए है कि मेरे तर्क पूरी तरह से खपत होती है, और अन्य नाम के अंत में जोड़ा नहीं एक तरह से तलाश कर रहा हूँ। कुछ sleuthing इस व्यवहार Git v1.7.x के आसपास कहीं बदल इंगित करता है, और मैं अभी तक वास्तव में निर्धारित किया है नहीं कि यह कैसे पूरा करने के लिए:

Git Alias - Multiple Commands and Parameters

उत्तर

10

आपका ekko2 उर्फ ​​वास्तव में करीब है ... क्या आप वास्तव में चाहते हैं यह है:

[alias] 
    ekko2 = !sh -c 'echo $1 && echo $1' - 

Git उपनाम खोल आदेश पर अमल $n चर स्थानापन्न करते हैं, लेकिन वे भी किसी भी तर्क आप उन्हें कमांड के अंत में पारित जोड़ देते हैं। तो आपके पहले उदाहरण में git ekko masterecho master && echo master master के समतुल्य है, जो इसके आउटपुट को समझाता है।

आपका दूसरे उदाहरण करीब है, लेकिन आप sh आदेश, जो सिर्फ अतिरिक्त तर्क अनदेखी कर रहा है करने के लिए "मास्टर" गुजर रहे हैं। उर्फ के अंत तक - जोड़कर, आप sh कह रहे हैं कि तर्क का पालन करें कि स्क्रिप्ट के लिए हैं sh निष्पादित हो रहा है, और sh खुद के लिए नहीं।

+0

+1 और स्पष्टीकरण के लिए स्वीकार करें। धन्यवाद! –

+2

सिर्फ रिकॉर्ड के लिए, एक ही परिणाम प्राप्त करने का एक और अपेक्षाकृत सामान्य तरीका एक फ़ंक्शन का उपयोग करना है: 'ekko2 ="! F() {echo $ 1 && echo $ 1}; f "'। यह संभावित रूप से थोड़ा अधिक कुशल है, क्योंकि यह एक दूसरे खोल को तोड़ने से बचाता है, मुझे लगता है ... – twalberg

+1

मेरे लिए, 'ekko2 = "! $ 1 echo; echo $ 2 #" "काम किया। '#' शेष रेखा को दबा देता है। – donquixote

4

ekko2 अंत में एक भी पानी का छींटा याद आ रही है:

[alias] 
    ekko2 = !sh -c 'echo $1 && echo $1' - 

देखें Git Wiki on Advanced aliases with arguments:

[alias] 
    example = !sh -c 'ls $2 $1' - 
1

आप एक बैश NOOP आदेश जोड़ सकते हैं

git config --global alias.hello-world '!echo "$1"; :' 
: अंत में ""

प्रिंट:

$ git hello-world hello world 
hello world 
संबंधित मुद्दे