2009-12-04 5 views
8

Ich habe Strawberry Perl und msys Perl 5.6 entfernt haben.Wie richte ich Strawberry Perl in MSYS ein?

Jetzt perl wird aufrufen Strawberry (wegen PATH env) aber wie ordne ich den perl Befehl in .pl oder anderen Perl-Script-Dateien, die #!/bin/perl oder #!/usr/bin/perl shebang Linien haben?

Ich wurde im msys Verzeichnis zur Herstellung einer Verknüpfung zu perl.exe in msys/ist oder fusioniert die ganze Erdbeere denken, aber ich bin nicht sicher.

Antwort

0

dieses wunderschön auf der Fensterseite des Computers, auf dem MSYS Seite funktioniert können Sie

  • Kontrolle der Umgebungsvariable PATH müssen und fixieren die Erdbeere perl Zugangsweg

  • Scheck enthalten die Skripte für den vollständigen Pfad in der Shebang-Zeile (#!/usr/bin/perl). Diese Pfade, die in msys absolut sind, sind in der Tat relativ zum msys-Installationsverzeichnis in Windows. Sie müssen möglicherweise Ihre Erdbeere perl installieren "plug", um zu passen oder die # zu ändern!

    Linie

im letzteren Fall meine Empfehlung wäre, etwas zu verwenden, wie: #!env perl, das die Umgebung für die Perl-Interpreter überprüft und lindert die Last des Umgangs mit/cygdrive/c/my/windows/path/nicht/visible/from/msys/sonst

0

Der richtige Shebang wäre z. #!"C:/strawberry/perl/bin/perl.exe". Möglicherweise möchten Sie jedoch Skripts explizit mit Perl ausführen, anstatt sich auf den Shebang zu verlassen, z. perl script.pl oder perl "C:\strawberry\perl\bin\cpan"

Beachten Sie, dass Strawberry Perl nicht die shebang Recht für seine eigene Skripte, wie cpan und perldoc bekommt. Bug berichtete bei https://rt.cpan.org/Public/Bug/Display.html?id=82837

3

Die Lösung wird auf erstellen einen Symlink zum Strawberry Perl ausführbaren aus MSYSSpitze des Hutes zu smaudet für seine Eingabe:

Zuerst entfernen oder die Perl ausführbaren Dateien umbenennen, die MSYS-Installation kam mit, falls vorhanden (was das OP bereits getan hat); zB:

mv /usr/bin/perl /usr/bin/perl.msys 
mv /usr/bin/cpan /usr/bin/cpan.msys 

Dann einen Symlink zu Strawberry Perl ausführbaren an seinem Platz schaffen:

ln -s /c/strawberry/perl/bin/perl.exe /usr/bin/perl 

# Unfortunately, doing the same for `cpan` doesn't work directly, because 
# Strawberry Perl's `cpan` executable is a *batch* file, `cpan.bat`, which 
# cannot be directly invoked from MSYS. 
# To invoke it from MSYS (assuming it is in the %PATH%): 
# cmd /c 'cpan.bat ...' 
# With an explicit path: 
# cmd /c 'c:\strawberry\perl\bin\cpan.bat ...' 
# 
# Here's how to create a stub script that still allows invocation as 
# `cpan`: 
echo 'cmd /c "C:\strawberry\perl\bin\cpan.bat $*"'>/usr/bin/cpan && chmod +x /usr/bin/cpan 

Sobald die /usr/bin/perl Symlink an seinem Platz ist, vorhandenen Skripts mit shebang Linien #!/usr/bin/perl und #!/bin/perl funktioniert wieder (letzteres funktioniert auch, weil /bin und /usr/bin effektiv die gleiche Stelle in MSYS sind).

Beachten Sie, dass mit der flexibleren shebang Linie geschriebene Skripte #!/usr/bin/env perl tut nicht dies benötigt, weil env wird direkt Strawberry Perl perl.exe auf dem Weg zu finden.


Einige Hintergrund:

Unix-Emulationsumgebungen wie MSYS und Cygwin tun nicht Respekt %PATHEXT% Variable Windows zu bestimmen, welche ausführbare Datei ein (nicht binär) aufzurufen Datei mit. Mit anderen Worten: Dateinamenerweiterungen haben keine Bedeutung bezüglich der Ausführung dort.

Stattdessen sie gehen allein davon ab, ob die Datei eine Shebang-Zeile hat:

  • Wenn es eine ist, die ausführbare Datei in der Shebang-Zeile angegeben verwendet wird.
  • Wenn keine vorhanden ist, wird die standardmäßige (POSIX-ähnliche) Shell /bin/sh verwendet.
    • So versucht *.bat oder *.cmd Dateien aufzurufen direkt ausfällt , weil sie und nicht über eine Unix shebang Linie haben, werden daher durch /bin/sh statt cmd.exe ausgeführt.

Anders als in Windows funktioniert dies auch mit (ausführbaren Dateien), die keine Dateinamenerweiterung überhaupt haben.

Verwandte Themen