2009-12-04 4 views
8

J'ai Strawberry Perl et ai msys Perl 5.6 enlevé.Comment configurer Perl Strawberry dans MSYS?

maintenant perl appellera Strawberry (en raison de PATH env), mais comment puis-je mapper la commande perl dans .pl ou d'autres fichiers de script Perl qui ont #!/bin/perl ou #!/usr/bin/perl lignes Shebang?

Je pensais faire un hardlink à perl.exe dans msys/bin ou fusionner l'ensemble fraise dans le répertoire de msys, mais je ne suis pas sûr.

Répondre

0

cela fonctionne à merveille sur les fenêtres côté de l'ordinateur, du côté MSYS vous devrez peut-être

  • vérifier la variable d'environnement PATH et fixer pour inclure le chemin d'accès perl fraise

  • contrôle les scripts pour le chemin complet dans la ligne shebang (#!/usr/bin/perl). Les chemins absolus dans msys sont en fait relatifs au répertoire d'installation de msys dans windows. vous devrez peut-être «brancher» votre installation Perl fraise pour faire correspondre ou changer le #! ligne

dans ce dernier cas ma recommandation serait d'utiliser quelque chose comme: #!env perl qui vérifie l'environnement pour l'interpréteur perl et alléger le fardeau de traiter/cygdrive/c/ma/windows/chemin/non/visible/from/msys/else

0

Le bon shebang serait, par ex. #!"C:/strawberry/perl/bin/perl.exe". Cependant, vous préférerez peut-être exécuter des scripts explicitement avec Perl plutôt que de compter sur le shebang, par exemple. perl script.pl ou perl "C:\strawberry\perl\bin\cpan"

Notez que Strawberry Perl ne reçoit pas le tralala droit pour ses propres scripts, tels que cpan et perldoc. Bug rapporté à https://rt.cpan.org/Public/Bug/Display.html?id=82837

3

La solution consiste à créer un lien symbolique vers l'exécutable Perl fraise à l'intérieur MSYSAstuce du chapeau à smaudet pour son entrée:

Tout d'abord, supprimer ou renommer les executables Perl l'installation de MSYS est venue avec, le cas échéant (que l'OP a déjà fait); par exemple:

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

Ensuite, créez un lien symbolique vers l'exécutable de Strawberry Perl à sa place:

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 

Une fois que le /usr/bin/perl symlink est en place, les scripts existants avec des lignes de Shebang #!/usr/bin/perl et #!/bin/perl travaillera à nouveau (ce dernier fonctionne également, car /bin et /usr/bin sont effectivement le même emplacement dans MSYS).

Notez que les scripts écrits avec la ligne de tralala plus flexible #!/usr/bin/env perl ne pas besoin, parce que env se directement trouver Strawberry Perl perl.exe dans le chemin.


Certains fond:

environnements d'émulation Unix tels que MSYS et Cygwin ne pas le respect Windows Variable %PATHEXT% pour déterminer quel exécutable pour appeler un fichier (non binaire) avec. En d'autres termes: extensions de nom de fichier n'ont aucune signification en ce qui concerne l'exécution là.

, ils lieu uniquement passent si le fichier a une ligne de tralala:

  • S'il y a un, l'exécutable spécifié dans la ligne de tralala est utilisé.
  • S'il n'y en a pas, le shell par défaut (de type POSIX) /bin/sh est utilisé.
    • Ainsi, en essayant d'invoquer directement *.bat ou *.cmd fichiers échoue, parce qu'ils ne disposent pas d'une ligne de tralala Unix et sont donc exécutés par /bin/sh plutôt que cmd.exe.

Contrairement aux fichiers Windows, cela fonctionne aussi avec (exécutables) sans extension de nom de fichier du tout.

Questions connexes