git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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
Previous: Han
Message 2 of 2 in “Two potential bugs in aliases that expand to shell commands”
  1. HanApr 4, 2013
  2. Jeff KingApr 4, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.