Re: Weird behavior of shell variables in git aliases

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Mar 22, 2011 at 10:57:08AM -0700, Junio C Hamano wrote:

> The first addition is indeed a huge improvement.
> 
>     Note that any argument you pass when running aliases are simply
>     appended to the shell command.
> 
> The original didn't explicitly say it but it really should have.  The
> example that comes before it, "alias.new = !...", should be updated with
> an invocation that takes a parameter, perhaps like this:
> 
>     With this alias defined:
> 
> 	[alias] since = "!gitk --all --since"
> 
>     you can view commits in the last week with:
> 
>         $ git since 7.days
> 
>     because this expands to "gitk --all --since 7.days" by concatenating
>     the arguments supplied at runtime to the alias.
> 
> Then say that "Note ..." to stress that point.  The description at that
> point has become much better.
> 
> With that understanding already there,
> 
>     This means that "alias.foo = !echo $# args: $1, $2 and $3" will
>     not do what you expect.
> 
> is no longer true; nobody sane would expect that if you made them realize
> that "simply appended" already.  Just dropping that sentence would make
> the resulting text flow much better.

Agreed, your version is better.

>     If you want to refer to arguments given to the alias, you can
>     wrap it as a shell script, e.g.
> 
> 	[alias] reversed = "!sh -c 'echo $2 $1' -"
> 
>     or a shell function, e.g.
> 
> 	[alias] reversed = "!reversed() { echo $2 $1 } && reversed"
> 
>     and invoke it like so:
> 
> 	$ git reversed one two
>         two one
> 
> I personally think the former "sh -c <str> -" is the more traditional and
> well understood form (iow, an idiom) for people who breathe shells.

Yeah, that is probably true. One advantage of the function idiom is that
it doesn't happen inside single-quotes, so it's one less layer of
quoting to deal with. And of course it saves a shell invocation. So I
think mentioning both is reasonable.

> > +----------------------
> > +alias.foo = !echo $# args: $1, $2 and $3
> > +----------------------
> 
> While I totally agree with the formatting advice you gave here, we may
> want to avoid this notation; neither "git config alias.foo = !echo ..."
> nor writing "alias.foo = ..."  in .git/config file would work.

Yeah, I didn't even think about that, but you are right.

-Peff
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]