Problem executing a .bat script in a directory with spaces using bash

Mark Bohlman mbohlman@tcicredit.com
Fri Sep 3 21:33:00 GMT 2004


Igor Pechtchanski wrote:

> On Fri, 3 Sep 2004, Mark Bohlman wrote:
> 
> 
>>Igor Pechtchanski wrote:
>>
>>>On Fri, 3 Sep 2004, Mark Bohlman wrote:
>>>
>>>
>>>>Igor Pechtchanski wrote:
>>>>
>>>>
>>>>>On Fri, 3 Sep 2004, Christopher Cobb wrote:
>>>>>
>>>>>
>>>>>>I get different results than you do.  It seems to work as expected:
>>>>>>
>>>>>>chcobb@CHCOBB-054009 /c/Documents and Settings 09:45:46
>>>>>>511$ cat test.bat
>>>>>>echo %1
>>>>>>
>>>>>>chcobb@CHCOBB-054009 /c/Documents and Settings 09:45:48
>>>>>>511$ ./test.bat
>>>>>>
>>>>>>C:\Documents and Settings>echo
>>>>>>ECHO is on.
>>>>>
>>>>>I believe you're missing the point.  Try
>>>>>
>>>>>../test.bat "hello world"
>>>>>
>>>>>and you'll get the error.
>>>>>
>>>>>I've come across this when writing a pure Windows loader for
>>>>>another program.  The above is actually an idiosyncrasy of the way
>>>>>spawn() works in Cygwin (and, incidentally, in Windows' own
>>>>>MSVCRT) -- it calls CreateProcess, which expects all arguments
>>>>>combined into one command string (which, in turn, is later parsed
>>>>>for separate arguments - yes, retarded, I know).  The fact is
>>>>>that, if any argument contains spaces, it has to be quoted before
>>>>>CreateProcess() is invoked.  Cygwin apparently doesn't do this
>>>>>properly to the first argument, so the above breaks. See
>>>>>spawn_guts() in winsup/cygwin/spawn.cc (warning: a 590!-line
>>>>>function). <http://cygwin.com/acronyms/#PTC>.
>>>>>	Igor
>>>>
>>>>You get the same "odd evaluation behavior" when doing
>>>>echo "Hello World" | ./test.bat
>>>>(in any directory).
>>>>-- Mark
>>>
>>>Actually, I don't.  Did you, by chance, mean "echo ...|xargs ./test.bat"?
>>>Even so, you should probably be a bit more specific about the "odd
>>>evaluation behavior" that you're observing.
>>>	Igor
>>
>>Hmmm.  I'm seeing the same results as you show above with a quoted "Hello
>>World" parameter to the ./test.bat.
>>
>>Then in doing the echo, without the xargs, results in the same
>>"non-evaluation" (what i consider to be 'odd') for parameter %1 within the
>>test.bat file.
>>-- Mark
> 
> 
> Well, piping the output of echo to test.bat's stdin is *not* the same as
> passing the string as a parameter.  In the former case, test.bat is called
> with no arguments, so %1 evaluates to nothing.  IOW, the behavior you're
> seeing is expected.
> 	Igor

Of course you are right on the stdin side.  My mistake.
And I think it's time i move back to Unix systems exclusively as the 
behavior is "as expected" (used loosely) under cmd.exe.
-- Mark


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list