Update (Aug-2016):
This question is no longer relevant, as msys2 now comes with cygpath
in its installation.
…
I’ll summarize my research here.
The cygpath equivalent in MSYS is to use this command:
{ cd /c/some/path && pwd -W; } | sed 's"https://stackoverflow.com/"\\|g'
The problem with this approach is that it requires existing path, e.g. the c:\some\path
has to be an existing directory; however, real cygpath supports paths that do not exist.
So, if you need to get path to a directory that doesn’t exist, then you can fallback to sed conversion of the path:
{ cd 2>/dev/null /c/some/path && pwd -W ||
echo /c/some/path | sed 's|^/\([a-z,A-Z]\)/|\1:/|'; } | sed 's"https://stackoverflow.com/"\\|g'
The mouthful of slashes is there to satisfy quoting rules of sed
. So, if c:\some\path
doesn’t exist on your PC, it will try to convert forward to back slashes and replace /c/
with c:\
(or any other drive letter). The only drawback for this is that it won’t work correctly non-existing paths that contain a mounted component, such as /bin/does-not-exist
or /usr/bin/does-not-exist
.
One more approach is to use cygpath from cygwin in MSYS. It seems that cygwin sets global environment variable CYGPATH, that is, you can use it from regular cmd.exe:
%CYGPATH% -w /c/some/path
C:\some\path
or from MSYS:
$CYGPATH -w /c/some/path
C:\some\path
as long as you set to point /c
to /cygdrive/c
in cygwin.
But this approach will print you /usr
located in cygwin installation, not in MSYS.
In short, I think msys should really include real cygpath in the default set of tools just for some cases that aren’t handled automatically by msys command line argument conversion logic