我正在尝试获取在Cygwin中作为Windows路径提供的文件的绝对路径,分别是Msys(Git Bash)perl。我希望解决方案在提供的路径是“本机”Cygwin / MSys路径时也能正常工作。
我尝试使用Cwd :: abs_path,但这似乎有点巧妙。这是一个测试:
user@MYPC MINGW64 /f/Temp
$ perl
use Cwd;
print Cwd::abs_path("F:\\") . "\n";
print Cwd::abs_path("F:\\test.txt") . "\n";
print Cwd::abs_path("..\\test.txt") . "\n";
/f
/f/Temp/F:/test.txt
/f/Temp/../test.txt
目录工作,相对路径“工作”但不给出我期望的结果(即..没有被消除),但是当我向绝对路径添加文件名时结果是错误的。我曾希望Cwd会为我做路径翻译。
我需要稍后提取部分路径(使用File :: Spec中的函数)并且还要打开文件。要继续使用提取的部分,路径应该是所使用的perl版本的原生路径。我想避免使用cygpath,因为我希望脚本也可以使用ActivePerl,它只能理解Windows路径。我当然可以添加一些ifs来调用unix-y perls的cygpath。
答案 0 :(得分:0)
您没有绝对路径。 msys和cygwin是unix仿真环境,而在unix中,绝对路径以/
开头。 F:\
是unix中的有效相对路径和文件名。
Linux$ touch 'F:\'
Linux$ ls
F:\
在cygwin中,/cygdrive/f/
指的是F:
。您可以使用命令行实用程序cygpath
在本机和Windows路径之间进行转换。
cygwin$ cygpath -w /cygdrive/c/
C:\
cygwin$ cygpath -u 'C:\'
/cygdrive/c/
msys还应该有一种通过其虚拟unix文件系统访问Windows驱动器的方法。