2016-12-16 4 views
4

Ich möchte ein Perl-Skript in Linux-Umgebung unter Windows 10 (WSL) verwenden. Ich habe WSL aktiviert, installierte Compiler (gcc und make), ausgeführt sudo apt-get install build-essential. Perl arbeitet und ich kann einfache Skripte ausführen. Probleme beginnen, wenn ich versuche, ein Perl-Modul zu installieren. Ich habe beispielsweise versucht, LWP hinzuzufügen, indem ich perl -MCPAN -e'install "LWP"' ausgeführt habe. Es gibt viele Fehler-/Warnmeldungen, beginnend mit Warning: the following files are missing in your kit:. Die volle Ausgabe ist zu groß, um sie hier einzufügen, also muss ich sie woanders hinlegen: http://pastebin.com/RRRedwbG. Kurz gesagt, unabhängig vom Paket werden alle .pm- und .t-Dateien als fehlend betrachtet.Installieren von Perl-Modulen in [Windows-Subsystem für Linux]

+2

Wahrscheinlich dieses Problem: https://github.com/Microsoft/BashOnWindows/issues/186 – melpomene

+0

ja! Ich habe es gerade auch gefunden –

+1

@VasilyA Übrigens können Sie einfach 'cpan LWP' tun. Keine Notwendigkeit, sich mit 'perl -MCPAN -e ... zu beschäftigen. – melpomene

Antwort

4

Die Lösung wurde bei github.com/Microsoft/BashOnWindows/issues/186 gefunden:
1. Lauf sudo apt-get install liblocal-lib-perl cpanminus build-essential
2. bearbeiten /usr/lib/perl/5.18.2/Config.pm (um Zeile 94) dont_use_nlink => 1
3. eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"

+2

Dieser dritte Befehl dient zur Verwendung von local :: lib, was nichts mit dem vorliegenden Problem zu tun hat. – ikegami

+1

Der erste Befehl installiert 'local :: lib',' cpanm' und einige Build-Tools (make, gcc, etc). Es ist auch nicht direkt verwandt. – melpomene

+0

gut, nur Bearbeitung 'Config.pm' funktionierte nicht für mich, ich war nur erfolgreich nach dem Ausführen aller drei Befehle. –

5

auf Unix-Dateisysteme zu haben, ein Verzeichnis des . ist ein Hardlink zu sich selbst, und ein Verzeichnis .. ist ein Hardlink zu seinem übergeordneten Verzeichnis. Wenn Sie also stat ein Verzeichnis angeben, wird die von stat zurückgegebene Linkanzahl mindestens 1 (name) + 1 (.) + $num_sub_dirs (..) sein.

$ 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 

Datei :: Finden stützt sich auf diese Informationen, um sich selbst zu optimieren, wenn möglich.

Perl und Datei :: Finden Sie wissen, das ist nicht der Fall für die FAT und NTFS-Dateisysteme, so dass die Optimierung unter Windows deaktiviert ist. Allerdings sieht VSL für sie wie ein Linux-System aus, so dass sie fälschlicherweise annehmen, dass es sich um ein Unix-Dateisystem handelt.

Die beste Lösung ist, um die Datei durch die Ausgabe des folgenden Befehls namens bearbeiten:

perl -MConfig -e'CORE::say $INC{"Config.pm"}' 

ändern

dont_use_nlink => undef 

zu

dont_use_nlink => 1 

Sie können die Änderung bestätigen mit

Diese Antwort basiert auf this bug report.

Verwandte Themen