我有
Strawberry Perl并删除了msys Perl 5.6.
现在perl将调用Strawberry(由于PATH env),但是如何在.pl或其他具有#!/ bin / perl或#!/usr/bin/perl shebang行的Perl脚本文件中映射perl命令?
我想在msys / bin中创建perl.exe的硬链接或者将整个Strawberry整合到msys目录中,但我不确定.
解决方法
解决方案是从帽子的MSYS Tip中创建一个到草莓Perl可执行文件的符号链接到
smaudet以获取他的输入:
首先,删除或重命名MSYS安装附带的Perl可执行文件(如果有的话)(OP已经完成);例如.:
mv /usr/bin/perl /usr/bin/perl.msys mv /usr/bin/cpan /usr/bin/cpan.msys
然后在其位置创建一个符合Strawberry Perl可执行文件的符号链接:
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
一旦/usr/bin/perl符号链接到位,带有shebang行#!/usr/bin/perl和#!/ bin / perl的现有脚本将再次工作(后者也可以工作,因为/ bin和/usr/bin在MSYS中实际上是相同的位置).
请注意,用更灵活的shebang line#!/usr/bin/env perl编写的脚本不需要这个,因为env将直接在路径中找到Strawberry Perl的perl.exe.
一些背景:
诸如MSYS和Cygwin之类的Unix仿真环境不尊重Windows’%PATHEXT%变量来确定调用(非二进制)文件的可执行文件.换句话说:文件扩展名对于那里的执行没有任何意义.
相反,他们只是通过文件是否有一个shebang线:
>如果有,则使用shebang行中指定的可执行文件.
>如果没有,则使用默认(类似POSIX)shell / bin / sh.
>因此,尝试直接调用* .bat或* .cmd文件失败,因为它们没有Unix shebang行,因此由/ bin / sh而不是cmd.exe执行.