www.delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2009/09/09/12:31:34

X-Recipient: archive-cygwin AT delorie DOT com
X-SWARE-Spam-Status: No, hits=-1.2 required=5.0 tests=AWL,BAYES_00
X-Spam-Check-By: sourceware.org
Message-ID: <989917.88039.qm@web30201.mail.mud.yahoo.com>
Date: Wed, 9 Sep 2009 09:31:11 -0700 (PDT)
From: "Ziser, Jesse" <xezlec AT yahoo DOT com>
Subject: Re: syntax for Cygwin bash invoking Win apps
To: cygwin AT cygwin DOT com
In-Reply-To: <f60fe000909090910p33546992v589a666b8f61bf76@mail.gmail.com>
MIME-Version: 1.0
X-IsSubscribed: yes
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Unsubscribe: <mailto:cygwin-unsubscribe-archive-cygwin=delorie DOT com AT cygwin DOT com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

--- 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 -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019