更新(2016 年 8 月):
这个问题不再相关,因为msys2cygpath
现在在其安装中附带。
...
我将在这里总结我的研究。
MSYS 中的cygpath等效项是使用以下命令:
{ 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
您的 PC 上不存在,它将尝试将正斜杠转换为反斜杠并替换/c/
为c:\
(或任何其他驱动器号)。唯一的缺点是它不能正常工作包含已安装组件的不存在路径,例如/bin/does-not-exist
or /usr/bin/does-not-exist
。
另一种方法是在 MSYS 中使用来自 cygwin 的cygpath 。似乎cygwin设置了全局环境变量CYGPATH,也就是说,你可以从常规的cmd.exe中使用它:
%CYGPATH% -w /c/some/path
C:\some\path
或来自 MSYS:
$CYGPATH -w /c/some/path
C:\some\path
只要你在cygwin中设置指向/c
即可。/cygdrive/c
但是这种方法会将您打印/usr
在 cygwin 安装中,而不是在 MSYS 中。
简而言之,我认为 msys 真的应该在默认工具集中包含真正的 cygpath,仅适用于 msys 命令行参数转换逻辑无法自动处理的某些情况