2

在 Cygwin 上,cygpath应用程序在 Windows 和 Unix 风格的路径之间进行转换。

考虑以下示例:

$ cygpath -u "c:/"
/cygdrive/c

$ cygpath -u "c:/cygwin64/bin"
/usr/bin

有没有办法/cygdrive/c/cygwin64/bin从第二个命令中获取?

我需要这个,因为有时 Cygwin 对它的根在哪里感到困惑,所以我想要一个绝对路径以便清楚。

4

1 回答 1

4

不,Cygwincygpath不支持这一点。你能做的最好的就是用你自己的转换工具手动修复它;类似于:

#!/usr/bin/env bash

if [[ "$1" == -z ]]; then
    # Invoked with -z, so skip normal cygpath processing and convert the path
    # here.
    #
    # The sed command replaces "c:" with "/cygdrive/c", and switches any
    # back slashes to forward slashes.
    shift
    printf "%s\n" "$*" | sed -r 's!(.):([\\\/].*)$!/cygdrive/\1\2!;s!\\!/!g'
else
    # Not invoked with -z, so just call cygpath with the arguments this script
    # was called with.
    exec cygpath "$@"
fi

如果你存储上面的脚本,mycygpath.sh那么它的行为将完全一样cygpath,除非你给它-z参数,在这种情况下它会简单地转换n://cygdrive/n/

$ ./mycygpath.sh -u "c:/"
/cygdrive/c

$ ./mycygpath.sh -u "c:/cygwin64/bin"
/usr/bin

$ ./mycygpath.sh -z "c:/cygwin64/bin"
/cygdrive/c/cygwin64/bin

当然,为什么“Cygwin 对它的根在哪里感到困惑”是一个显而易见的问题;这根本不应该发生,这意味着您的 Cygwin 设置有问题。但这不是你问的问题,而且你没有提供足够的细节来开始提出建议。

于 2015-11-10T18:45:13.093 回答