Strawberry Perl 并删除了 msys Perl 5.6。
现在perl
将调用 Strawberry(由于
PATH
env),但是如何在
perl
或其他具有
.pl
或
#!/bin/perl
shebang 行的 Perl 脚本文件中映射
#!/usr/bin/perl
命令?我正在考虑在
msys/bin 中创建一个到 perl.exe 的硬链接,或者将整个 Strawberry 合并到 msys 目录中,但我不确定。
从 MSYS 中创建一个指向 Strawberry 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 行
#!/usr/bin/env perl
编写的脚本不需要需要这个,因为
env
将直接在路径中找到 Strawberry Perl 的
perl.exe
。
背景:
MSYS 和 Cygwin 等 Unix 仿真环境不尊重 Windows 的%PATHEXT%
变量来确定使用哪个可执行文件来调用(非二进制)文件。换句话说:文件扩展名对于执行来说没有任何意义。 相反,他们仅根据文件是否有 shebang 行
:
如果有,则使用 shebang 行中指定的可执行文件。/bin/sh
*.bat
*.cmd
文件会失败,因为它们没有 Unix shebang 行,因此由
/bin/sh
而不是 cmd.exe
执行。
这在计算机的 Windows 端工作得很好,在 MSYS 端你可能需要
在后一种情况下,我的建议是使用类似:
#!env perl
正确的 shebang 是,例如。