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.makc:\cygwin\cygbuild\build.mak, Однако оболочка будет интерпретировать обратную косую черту, поэтому вам нужно помешать оболочке интерпретировать обратную косую черту.

Вы можете запретить оболочке интерпретировать обратную косую черту в аргументах, поставив перед ними обратную косую черту или заключив в кавычки (одинарные кавычки): c:\\cygwin\\cygbuild\\build.mak или же 'c:\cygwin\cygbuild\build.mak',

Двойные кавычки не помогут в этом случае. Двойные кавычки останавливают разбиение аргумента на пробел, но не прекращают интерпретацию escape-выражений (\) или доллар ($) расширение.

Другие вопросы по тегам