总是从 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 设置有问题。但这不是你问的问题,你没有提供足够的细节来开始提出建议。
在 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 设置有问题。但这不是你问的问题,你没有提供足够的细节来开始提出建议。