2013-08-08 13 views
6

sto usando Git Bash v1.8.1, con un paio di alias (per le prove):Git parametri alias aggiungendo per porre fine

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

Ma quando li ho eseguito, che vedo:

> git ekko master 
master 
master master 

E:

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

Il mio comportamento previsto è:

> git ekko master 
master 
master 

Sono abbastanza nuovo per gli alias: sto cercando un modo per garantire che i miei argomenti vengano interamente consumati e non aggiunti alla fine dell'alias. Alcuni sleuthing indica questo comportamento cambiato da qualche parte intorno Git v1.7.x, e non ho ancora deciso esattamente come eseguire questa:

Git Alias - Multiple Commands and Parameters

risposta

10

tuo ekko2 alias è davvero vicino ... cosa si vuole veramente è questo:

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

Git alias che eseguono comandi shell fanno sostituire le variabili $n, ma anche accodare argomenti che li passano alla fine del comando. Quindi nel tuo primo esempio git ekko master equivale a echo master && echo master master, che spiega il suo output.

Il tuo secondo esempio è più vicino, ma stai passando "master" al comando sh, che sta semplicemente ignorando l'argomento extra. Aggiungendo - alla fine dell'alias, stai dicendo a sh che gli argomenti che seguono sono intesi per lo script sh è in esecuzione, e non per sh stesso.

+0

+1 e accettare per la spiegazione. Grazie! –

+2

Solo per la cronaca, un altro modo relativamente comune per ottenere lo stesso risultato è usare una funzione: 'ekko2 ="! F() {echo $ 1 && echo $ 1}; f "'. È potenzialmente leggermente più efficiente, in quanto evita di forgiare una seconda shell, penso ... – twalberg

+1

Per me, 'ekko2 ="! Echo $ 1; echo $ 2 # "' ha funzionato. '#' Sopprime il resto della linea. – donquixote

1

È possibile aggiungere un comando Bash noop ":" alla fine:

git config --global alias.hello-world '!echo "$1"; :' 

Stampe:

$ git hello-world hello world 
hello world 
Problemi correlati