Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Git alias appending parameters to end

Tags:

git

I'm using Git Bash v1.8.1, with a few aliases (for testing):

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

But when I run them, I see:

> git ekko master
master
master master

And:

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

My intended behavior is:

> git ekko master
master
master

I'm fairly new to aliases - I'm looking for a way to ensure that my arguments are consumed entirely, and not appended to the end of the alias. Some sleuthing indicates this behavior changed somewhere around Git v1.7.x, and I haven't yet determined exactly how to accomplish this:

Git Alias - Multiple Commands and Parameters

like image 237
Craig Otis Avatar asked Aug 08 '13 14:08

Craig Otis


2 Answers

Your ekko2 alias is really close... What you really want is this:

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

Git aliases that execute shell commands do substitute the $n variables, but they also append any arguments you pass them to the end of the command. So in your first example git ekko master is equivalent to echo master && echo master master, which explains its output.

Your second example is closer, but you're passing "master" to the sh command, which is just ignoring the extra argument. By adding - to the end of the alias, you're telling sh that the arguments that follow are intended for the script sh is executing, and not for sh itself.

like image 143
Ajedi32 Avatar answered Sep 19 '22 16:09

Ajedi32


You can add a Bash noop command ":" at the end:

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

Prints:

$ git hello-world hello world
hello world
like image 29
lumbric Avatar answered Sep 22 '22 16:09

lumbric