This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: syntax for Cygwin bash invoking Win apps


--- On Wed, 9/9/09, Christopher Faylor <cgf-use-the-mailinglist-please@cygwin.com> wrote:

> From: Christopher Faylor <cgf-use-the-mailinglist-please@cygwin.com>
> Subject: Re: syntax for Cygwin bash invoking Win apps
> To: cygwin@cygwin.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.? 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.
> 
> Cygwin does quote individual arguments if they contain
> "special"
> characters like quotes or spaces when sending a
> command-line to a
> windows program.? 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 following example, which I just discovered).

$ cmd /c echo '"hi"'
"\"hi\""

This does appear to give the right result ("hi") after standard Windows command line parsing for Windows apps I write, so I guess that's the best thing 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 your problem, so I'll drop it.  I guess my scripts are just always going to be a little unpredictable -- the cost of doing business with Windows users.

Now, if I can just find out exactly which kinds of preprocessing steps Cygwin 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]