Mail Archives: cygwin/2009/09/09/12:31:34
--- On Wed, 9/9/09, Mark J. Reed <markjreed AT gmail DOT com> wrote:
> From: Mark J. Reed <markjreed AT gmail DOT com>
> Subject: Re: syntax for Cygwin bash invoking Win apps
> To: cygwin AT cygwin DOT com
> Date: Wednesday, September 9, 2009, 11:10 AM
> On Wed, Sep 9, 2009 at 12:05 PM,
> Christopher Faylor wrote:
> >>>>> $ cmd /c echo "\"abc\""
> >>>>> "\"abc\""
> >>>>>
> >>>>> # Wahhh?!
> >>>>>
> >>>>> Anyone who knows the explanation would
> make me very grateful. I've tried
> >>>>> this with other Windows apps too, and
> the same weirdness seems to occur.
> >>
> >>Larry Hall:
> >>>>All of the above is consistent with bash
> shell quoting.
> >>
> >>No, it's really not. =A0Those backslashes should be
> long gone by the
> >>time cmd.exe gets its arguments, yet it echoes
> them. =A0It seems that
> >>the Cygwin version of bash stops short before doing
> some of the work
> >>it normally does itself on other systems, assuming
> the executed
> >>command will have its command line run through the
> preprocessor in the
> >>Cygwin DLL.
> >
> > Actually, I'd say that was cmd doing something funky.
> =A0It's hard to believe
> > that bash was actually special-casing cmd.exe.
>=20
> I don't think it's special-casing cmd.exe.=A0 I think
> some of the
> command line processing that is done by bash on Linux has
> been moved
> out of bash and into the DLL command line preprocessor on
> Cygwin.
>=20
> But even if I'm wrong about the details, bash has to be
> doing
> something different here.=A0 On any other UNIX system,
> the "cmd" command
> would get an argv of ["cmd", "/c", "echo", "\"abc\""], but
> here it
> seems to be getting ["cmd", "/c", "echo", "\\\"abc\\\""].
Actually, in the case I gave, it looks more like it's getting ["cmd", "/c",=
"echo", "\"\\\"abc\\\"\""], which is even sillier.
But there's something else I just found: I wrote a Visual Studio applicatio=
n to just print out the arguments it gets, and for the command line:
$ cmd /c testme "\"hi\""
I get ["cmd", "/c", "testme", "\"hi\""], which is exactly what I would expe=
ct! Furthermore, it actually ADDS quotes in one case I just tried:
$ cmd /c echo \"hi\"
"\"hi\""
Where did those outer quotes come from? Maybe there are a combination of w=
eird things going on. It almost seems like cmd.exe is somehow getting acce=
ss to its command line before bash touches it, and it's using its own weird=
rules to decide how to parse that, but something somewhere (maybe bash?) i=
s adding quotes in a futile attempt to make itself understood better?
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
- Raw text -