Пакеты 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