Mail Archives: cygwin/2009/09/09/14:22:29
--- On Wed, 9/9/09, Christopher Faylor <cgf-use-the-mailinglist-please AT cygw=
in.com> wrote:
> From: Christopher Faylor <cgf-use-the-mailinglist-please AT cygwin DOT com>
> Subject: Re: syntax for Cygwin bash invoking Win apps
> To: cygwin AT cygwin DOT com
> Date: Wednesday, September 9, 2009, 12:45 PM
> On Wed, Sep 09, 2009 at 12:10:44PM
> -0400, Mark J. Reed wrote:
> >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. ??Those backslashes should
> be long gone by the
> >>>time cmd.exe gets its arguments, yet it echoes
> them. ??It 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. ??It's hard to believe
> >> that bash was actually special-casing cmd.exe.
> >
> >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
> Cygwin does quote individual arguments if they contain
> "special"
> characters like quotes or spaces when sending a
> command-line to a
> windows program.=A0 It's up to the windows program to
> understand quoting.
OK, yeah, I now see that is basically what's going on. Bash is processing =
it as normal and then Cygwin is adding all kinds of quoting before invoking=
the Windows executable.
However, it does more than quote them (which would only bother me a little)=
, because it also added backslashes in front of the quote-marks (see the fo=
llowing example, which I just discovered).
$ cmd /c echo '"hi"'
"\"hi\""
This does appear to give the right result ("hi") after standard Windows com=
mand line parsing for Windows apps I write, so I guess that's the best thin=
g to do, but I don't really understand it... I mean how does Windows decide=
whether a backslash is an escape or just a backslash? Well, that's not yo=
ur problem, so I'll drop it. I guess my scripts are just always going to b=
e a little unpredictable -- the cost of doing business with Windows users.
Now, if I can just find out exactly which kinds of preprocessing steps Cygw=
in apps do on their arguments when called from Windows... but I guess I can=
just go through the bash manual and try each step, one at a time, to find =
out.
Thanks for the help, everyone.
--
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 -