cygpath -m behaviour change

Christopher Faylor
Mon Sep 16 16:41:00 GMT 2013

On Mon, Sep 16, 2013 at 10:56:37AM +0100, David Griffiths wrote:
>> Yes, that's exactly right, assuming that 'boo' doesn't exist.
>Hi, it happens even if boo does exist.

Not for me.

% mkdir /boo
$ ls /boo/..
bin           cygwin               dev   localhome     proc   usr
boo           cygwin.bat           etc   netrel        sbin   var
cygdrive      cygwin.ico           home  share
cygmount.bat  Cygwin-Terminal.ico  lib   netrel.inst   tmp
% cygpath -m /boo/..

It doesn't work if boo is not a directory but that is as expected.

>To put it in context, the
>script in question was attempting to determine the current directory:
>CURRENT_DIR=$(cygpath -ma "${0}"/../)
>(I didn't write this script but I assume they did this for performance reasons.)

>But anyway, as you can see ${0} always exists.
>I looked at the other thread but don't see an immediate connection as
>that was checking for non-existing path members.

nonexistent or non-directory.  We've fixed a bug in later versions of Cygwin
which this script relied on.

It could be rewritten as:

CURRENT_DIR=$(cygpath -ma "$(dirname $0)")

(assuming that CURRENT_DIR isn't really trying to find the cwd, in which
case the script is just wrong to begin with)


Problem reports:
Unsubscribe info:

More information about the Cygwin mailing list