总是从 cygpath 获取以 /cygdrive 开头的路径?

Always get path starting /cygdrive from cygpath?

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

考虑以下示例:

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

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

有没有办法从第二个命令得到/cygdrive/c/cygwin64/bin

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

不,Cygwin 的 cygpath 不支持这个。您能做的最好的事情就是使用您自己的转换工具手动修复它;类似于:

#!/usr/bin/env bash

if [[ "" == -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/!;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 gets confused about where it root is";这根本不应该发生,并且暗示您的 Cygwin 设置有问题。但这不是你问的问题,你没有提供足够的细节来开始提出建议。