Re: Two potential bugs in aliases that expand to shell commands
- From
Jeff King <peff@peff.net>
- Date
- Apr 4, 2013, 06:40 UTC
- Message-ID
- <20130404064007.GA8278@sigill.intra.peff.net>
- In-Reply-To
- <CACE=nd1dwhCyrKdzFq7O4UgD1TH8-c5R+4L2rH0NGW-jWqLr_g@mail.gmail.com>
On Wed, Apr 03, 2013 at 07:05:33PM -0700, Han wrote:
Show 5 quoted lines
> There appears to be another case string values need to be enclosed in > quotes, which is a shell command where you want to preserve quote > characters (not leading or trailing); a minimal example is > > shortcut = !cd "" && pwd
Yes. You must escape any double-quotes that are not the beginning or end of a quoted string.
> shortcut = !"cd \"\" && pwd"
This is fine. Technically so is:
shortcut = !cd \"\" && pwd
but I think it is more readable to put such shell snippets inside a double-quoted string, to make it more clear what is going on.
Documentation patches welcome.
Show 10 quoted lines
> The other bug I'm much more confused by. If you have an alias like > > shortcut = !"echo -n lol; echo wut" > > it will, in fact, print > > -n lol > wut > > which is, uh, not what bash prints. Is git special-casing echo?
No, git does not special-case echo. But it runs shell commands with /bin/sh, which may or may not be bash on your system (and "-n" is not necessarily portable to other POSIX shells).
If you really want to use bash, do:
shortcut = "!bash -c 'echo -n lol; echo wut'"
or just use printf, which is a portable way to spell "echo -n".
-Peff