Cygpath无法将Windows路径转换为Linux路径。

7

我正在尝试在Windows机器上将文件路径转换为/从Linux和Windows。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

有人遇到这个问题吗?分享你的经验。

谢谢


请注意,这不是Linux(也不是WFL)。它们是Gnu。Cygwin使用名为“cygwin.dll”的dll来执行类似于Unix内核(如Linux)的工作。(Gnu + Linux)- Linux + dll = Gnu + dll。 - ctrl-alt-delor
4个回答

18
我得到了这个问题的答案。
cygpath -u 'c:\cygwin\cygbuild\build.mak'
即路径应该用单引号给出。

3
据我所知,使用cygwin中的路径需要使用正斜杠(forward slashes)。在路径中存在空格时,单引号会有所帮助(我猜测在这种情况下,使用反斜杠代替正斜杠)。否则,反斜杠就像转义字符一样,而空格(虽然不在您的情况中)本身需要转义字符。因此,引用路径往往可以消除此类麻烦。
以下是帮助我理解的链接:
- 这个 opencv(使用cygwin)教程,第4页,其中有一个使用了路径的示例,带引号和不带引号,指示何时需要引号。 - 还有 这个非常有用,它是Cygwin常见问题的列表,包括如何处理空格(或在这种情况下,在路径中使用反斜杠添加引号将有所帮助)。

0

-m选项是cygpath中最简单的解决方案。Windows软件通常接受/\。(可能有一些例外,但我使用的开发工具都可以正常处理。)

$ cygpath -m /cygdrive/c/CYGWIN/CYGBuild/build.mak

C:/Cygwin/CYGBuild/build.mak

0

似乎没有人解释为什么,这里有一个解释。

Cygpath 可以接受斜杠和反斜杠:c:/cygwin/cygbuild/build.mak c:\cygwin\cygbuild\build.mak。但是 shell 会解释反斜杠,因此您需要阻止 shell 解释反斜杠。

您可以通过在参数前面加上反斜杠或用单引号引用来阻止 shell 在参数中解释反斜杠:c:\\cygwin\\cygbuild\\build.mak'c:\cygwin\cygbuild\build.mak'

双引号在这种情况下无法帮助。双引号会停止参数在空格上的分割,但不会停止转义符(\)或美元符号($)扩展的解释。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接