在 Cygwin 上,cygpath
应用程序在 Windows 和 Unix 风格的路径之间进行转换。
考虑以下示例:
$ cygpath -u "c:/"
/cygdrive/c
$ cygpath -u "c:/cygwin64/bin"
/usr/bin
有没有办法/cygdrive/c/cygwin64/bin
从第二个命令中获取?
我需要这个,因为有时 Cygwin 对它的根在哪里感到困惑,所以我想要一个绝对路径以便清楚。
不,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 设置有问题。但这不是你问的问题,而且你没有提供足够的细节来开始提出建议。