Пакеты Windows в Cygwin с пробелами в пути и аргументами

Рассмотрим этот фиктивный пакетный скрипт Windows:

echo %1

Предполагается просто передать терминалу свой первый аргумент.
Предположим его путь в соотв. Windows, стиль Cygwin это:

c:\test\win.bat 
/cygdrive/c/test/win.bat 

Из Cygwin Bash:

$ c:\test\win.bat  "hello world"
"hello world"

Таким образом, кавычки правильно определяют один аргумент.

Но теперь давайте введем пробелы в пути:

"c:\te st\win.bat" 
/cygdrive/c/te\ st/win.bat 

Затем:

$ /cygdrive/c/te\ st/win.bat "hello world" 

дает:

"C:\te" is not recognized as an internal or external command, operable program or batch file.

То же самое происходит с:

$ "/cygdrive/c/te st/win.bat" "hello world" 

Следует отметить это:

$ /cygdrive/c/te\ st/win.bat "hello"
hello 

То есть hello сейчас передается win.bat без кавычек (и с "/cygdrive/c/te st/win.bat" "hello" или).

Как я могу иметь пробелы как в пути, так и в аргументе?

1 ответ

$ echo "echo %~1" > /cygdrive/c/te\ st/win.bat    
$ cat /cygdrive/c/te\ st/win.bat
echo %~1
$ cmd /c $(echo "c:\te st\win.bat"| sed 's/ /^ /g') "aaa bbb"

C:\Users\Me>echo aaa bbb
aaa bbb
Другие вопросы по тегам