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.