cwd :: abs_path打破了msys,cygwin

时间:2017-10-16 14:48:06

标签: perl cygwin msys

我正在尝试获取在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。

1 个答案:

答案 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驱动器的方法。

相关问题