我想在Windows10 (WSL)下的Linux环境中使用Perl脚本。我已经启用了WSL,安装了编译器(gcc
和make
),执行了sudo apt-get install build-essential
。Perl正在工作,我可以运行简单的脚本。当我试图安装perl模块时,问题就开始了。例如,我试图通过运行LWP
来添加perl -MCPAN -e'install "LWP"'
。它提供了大量的错误/警告消息,从Warning: the following files are missing in your kit:
开始。整个输出太大,无法粘贴到这里,所以我必须将其放在其他地方:http://pastebin.com/RRRedwbG。简而言之,不管包如何,所有的.pm和.t文件都被认为是丢失的。
发布于 2016-12-16 17:29:37
在github.com/Microsoft/BashOnWindows/issues/186找到的解决方案
sudo apt-get install liblocal-lib-perl cpanminus build-essential
/usr/lib/perl/5.18.2/Config.pm
(第94行),使其具有dont_use_nlink => 1
eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"
发布于 2016-12-16 17:50:05
在unix文件系统中,目录的.
是指向自身的硬链接,而目录的..
是指向其父目录的硬链接。因此,当您stat
一个目录时,stat
返回的链接计数至少是1 (name) + 1 (.) + $num_sub_dirs (..)
。
$ ls -ld .
drwx------ 5 ikegami ikegami 46 Dec 16 12:03 . # 5 = Could have up to three subdirs
$ ls -l .
total 0
drwx------ 2 ikegami ikegami 10 Dec 16 12:03 a # 2 = No subdirs
drwx------ 3 ikegami ikegami 24 Dec 16 12:03 b # 3 = Could have up to one subdir
drwx------ 2 ikegami ikegami 10 Dec 16 12:03 c # 2 = No subdirs
文件::Find在可能的情况下依赖于该信息来优化自身。
Perl和file::FindW知FAT和NTFS文件系统不是这种情况,所以在Windows上禁用了优化。然而,在他们看来,VSL就像一个Linux系统,因此他们错误地假设他们在处理unix文件系统。
最好的解决方法是编辑由以下命令的输出命名的文件:
perl -MConfig -e'CORE::say $INC{"Config.pm"}'
变化
dont_use_nlink => undef
至
dont_use_nlink => 1
您可以使用
$ perl -V:dont_use_nlink
dont_use_nlink='1';
这个答案是基于这个错误报告的。
https://stackoverflow.com/questions/41189089
复制相似问题