public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
From: Brian Inglis <Brian.Inglis@SystematicSw.ab.ca>
To: cygwin@cygwin.com
Subject: Re: Process argument passing problems
Date: Fri, 21 Jun 2019 21:13:00 -0000	[thread overview]
Message-ID: <020308f0-60d2-33eb-78da-d086a476560f@SystematicSw.ab.ca> (raw)
In-Reply-To: <13855b6c-f65e-b07f-3f6f-4ffd5cb945a6@t-online.de>

On 2019-06-21 14:15, Hans-Bernhard Bröker wrote:
> Am 21.06.2019 um 17:19 schrieb reiter.christoph@gmail.com:
>> I have to following problem (using cmd.exe):
>> C:\cygwin64\home\xy>C:\cygwin64\bin\echo.exe -DFOO=\"BAR\" -DBAR=\"FOO\"
>> -DFOO=\BAR" -DBAR="FOO"
>> I would have expected:
>> -DFOO="BAR" -DBAR="FOO"
> Expecting cmd.exe to parse command lines in anything resembling a sane
> way is, unfortunately, an exercise in futility.
> Microsoft allowed blanks in filenames with hardly any regard for the
> concepts of command lines and their parsing.  We're still fighting with
> the repercussions now, 25 years later.
>> Context: I'm executing various cygwin programs through (native) Python and
>> passing C macros to gcc like 'gcc -DFOO=\"BAR\"' fails because of this.
> Are you sure Python even goes through cmd.exe to pass those command
> lines?  If it doesn't, figuring out what cmd.exe does may be even less
> fruitful than it already is.
>> More background: https://github.com/msys2/MINGW-packages/issues/3548
> Please note that that's about MSYS2, which, while closely related to
> Cygwin, is not really the topic of this mailing list.

Not only are you running from cmd, you are running Cygwin /bin/echo, which does
additional command line parsing when not invoked from Cygwin.
Please note that the cmd escape char is "^" caret/uparrow not backslash "\" so
you might have more luck trying e.g.
	> \cygwin64\bin\echo ^"-DFOO=\"BAR\" -DBAR=\"FOO\"
	-DFOO="BAR" -DBAR="FOO"
or
	> \cygwin64\bin\echo ^"-DFOO=\^"BAR\^" -DBAR=\^"FOO\^"
	-DFOO="BAR" -DBAR="FOO"
depending on what you are trying to pass from where to what.

All quotes and backslashes are stripped by shells while building the calling
argv array, so you should only need a backslash or quotes to pass args with
spaces from cmd to Cygwin programs, unless programs require quotes around option
values, which gcc shouldn't.

You will have to read up on the details of MSYS2 and Python command line parsing
and how they pass command line arguments to WinExec(), ProcessCreate(), or
ShellExecute() to run programs.

Using Cygwin shells and python would make this a whole lot easier!

-- 
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada

This email may be disturbing to some readers as it contains
too much technical detail. Reader discretion is advised.

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

  reply	other threads:[~2019-06-21 21:13 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-21 15:19 reiter.christoph
2019-06-21 20:15 ` Hans-Bernhard Bröker
2019-06-21 21:13   ` Brian Inglis [this message]
2019-06-22  7:15     ` reiter.christoph
2019-06-22  7:09   ` reiter.christoph
2019-06-22  8:41 ` reiter.christoph

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=020308f0-60d2-33eb-78da-d086a476560f@SystematicSw.ab.ca \
    --to=brian.inglis@systematicsw.ab.ca \
    --cc=cygwin@cygwin.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).