更新(2016 年 8 月):
这个问题不再相关,因为msys2 https://msys2.github.io/现在带有cygpath
在其安装中。
...
我将在这里总结我的研究。
The cygpathMSYS 中的等效命令是使用以下命令:
{ cd /c/some/path && pwd -W; } | sed 's|/|\\|g'
这种方法的问题是它需要现有路径,例如这c:\some\path
必须是现有目录;然而,真实的cygpath支持不存在的路径。
因此,如果您需要获取不存在的目录的路径,那么您可以回退到路径的 sed 转换:
{ cd 2>/dev/null /c/some/path && pwd -W ||
echo /c/some/path | sed 's|^/\([a-z,A-Z]\)/|\1:/|'; } | sed 's|/|\\|g'
满嘴的斜杠是为了满足引用规则sed
。因此,如果c:\some\path
您的电脑上不存在,它会尝试将正斜杠转换为反斜杠并替换/c/
with c:\
(或任何其他驱动器号)。唯一的缺点是它无法正确工作包含已安装组件的不存在路径,例如/bin/does-not-exist
or /usr/bin/does-not-exist
.
另一种方法是使用cygpath来自 MSYS 中的 cygwin。 cygwin 似乎设置了全局环境变量 CYGPATH,也就是说,您可以从常规 cmd.exe 中使用它:
%CYGPATH% -w /c/some/path
C:\some\path
或来自 MSYS:
$CYGPATH -w /c/some/path
C:\some\path
只要你设定指向/c
to /cygdrive/c
在 Cygwin 中。
但这种方法会打印你/usr
位于 cygwin 安装中,而不是在 MSYS 中。
简而言之,我认为 msys 确实应该在默认工具集中包含真正的 cygpath,只是针对某些 msys 命令行参数转换逻辑无法自动处理的情况