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|/|\\|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|/|\\|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
cygpath
. If we addcygpath.exe
from @user1307996's answer into MSYS bin, it works. – Absentee\Windows
to posix using these hairy scripts. It makes no sense not to use cygpath on cygwin – Cribbingcygpath
available... – Print