Andrey Repin via Cygwin wrote:
I'm using a wrapper script to comfortably start VS Code from file manager.

The last line of it is

cygstart --hide -- "/proc/cygdrive/c/Program Files/Microsoft VS Code/bin/code.cmd" "$(cygpath 
-alw "$_arg")"

It works well up to the point where there are no spaces in the $_arg. But on
the first seen space it break the arguments list into pieces.
I have to double-quote the argument to maintain the consistency, like

cygstart --hide -- "/proc/cygdrive/c/Program Files/Microsoft VS Code/bin/code.cmd" "\"$(cygpath 
-alw "$_arg")\""

but that's a questionable solution at best.

This is as expected. Unlike Cygwin's exec() emulation, cygstart does not add any quoting during conversion of the argv[] array to the plain argument string required for Windows process creation API.

Example:

$ cat test.cmd
@echo off
echo %%1 = '%1'>test.txt
echo %%2 = '%2'>>test.txt
echo %%3 = '%3'>>test.txt
echo %%4 = '%4'>>test.txt
echo %%5 = '%5'>>test.txt

$ ./test.cmd ArgOne 'Arg Two' 'Arg    Three'; cat test.txt
%1 = 'ArgOne'
%2 = '"Arg Two"'
%3 = '"Arg    Three"'
%4 = ''
%5 = ''

$ cygstart ./test.cmd ArgOne 'Arg Two' 'Arg    Three';\
  sleep 1; cat test.txt
%1 = 'ArgOne'
%2 = 'arg'
%3 = 'Two'
%4 = 'Arg'
%5 = 'Three'

$ cygstart ./test.cmd ArgOne '"Arg Two"' '"Arg    Three"' ;\
  sleep 1; cat test.txt
%1 = 'ArgOne'
%2 = '"Arg Two"'
%3 = '"Arg    Three"'
%4 = ''
%5 = ''

$ cygstart ./test.cmd 'ArgOne "Arg Two" "Arg    Three"' ;\
  sleep 1; cat test.txt
%1 = 'ArgOne'
%2 = '"Arg Two"'
%3 = '"Arg    Three"'
%4 = ''
%5 = ''

--
Regards,
Christian


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

Reply via email to