cygpath не может преобразовать путь Windows в путь Linux
Я пытаюсь конвертировать пути к файлам в / из Linux и Windows на Windows Machine.
Unix путь к Windows работает нормально.
$ cygpath -w /cygdrive/c/CYGWIN/CYGBuild/build.mak
C:\CYGWIN\CYGBuild\build.mak
Но путь Windows к Linux дает неправильный вывод. т.е. отсутствует "/", а также Cygdrive
$ cygpath -u c:\cygwin\cygbuild\build.mak
c:cygwincygbuildbuild.mak
Кто-нибудь сталкивался с этой проблемой?? Поделитесь своим опытом.
Спасибо
4 ответа
Я получил ответ на этот вопрос.
$ cygpath -u 'c:\cygwin\cygbuild\build.mak'
т.е. путь должен быть указан в одинарных кавычках.
На самом деле, насколько я знаю; вам нужны косые черты в путях, используемых в cygwin. Одиночные кавычки помогают в тех случаях, когда в пути есть пробелы (и я предполагаю, что в этом случае используются обратные косые черты вместо прямых косых черт). В противном случае обратная косая черта похожа на escape-символы, а пробелы (хотя и не в вашем случае) сами требуют escape-символов. Таким образом, цитирование пути имеет тенденцию устранять такие неприятности.
Вот ссылки, которые помогают мне понять это:
- Это руководство по opencv (с использованием cygwin), стр. 4, где приведен пример используемых путей с кавычками и без них, указывающих, когда они могут понадобиться.
- Также это очень полезно; список часто задаваемых вопросов Cygwin, в том числе о том, как обращаться с пробелами (или в этом случае обратная косая черта в пути, где может помочь добавление кавычек).
cygpath-х -m
вариант, вероятно, самое простое решение. Программное обеспечение Windows обычно принимает /
так же как \
, (Может быть несколько исключений, но все инструменты разработки, с которыми я работаю, были в порядке.)
$ cygpath -m /cygdrive/c/CYGWIN/CYGBuild/build.mak
C:/Cygwin/CYGBuild/build.mak
Кажется, никто не объяснил, почему, у нас здесь есть объяснение.
Cygpath
будет принимать косые черты и обратные косые черты: c:/cygwin/cygbuild/build.mak
c:\cygwin\cygbuild\build.mak
, Однако оболочка будет интерпретировать обратную косую черту, поэтому вам нужно помешать оболочке интерпретировать обратную косую черту.
Вы можете запретить оболочке интерпретировать обратную косую черту в аргументах, поставив перед ними обратную косую черту или заключив в кавычки (одинарные кавычки): c:\\cygwin\\cygbuild\\build.mak
или же 'c:\cygwin\cygbuild\build.mak'
,
Двойные кавычки не помогут в этом случае. Двойные кавычки останавливают разбиение аргумента на пробел, но не прекращают интерпретацию escape-выражений (\
) или доллар ($
) расширение.