【问题标题】:How do I set up Strawberry Perl in MSYS?如何在 MSYS 中设置 Strawberry Perl?
【发布时间】:2009-12-04 10:42:59
【问题描述】:

我有 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 目录中,但是我不确定。

【问题讨论】:

  • 请注意,Strawberry Perl 和 MSYS Perl (/usr/bin/perl) 可能不是 100% 兼容的,尤其是当涉及到 MSYS 支持的 unixy 东西和原生 Windows 的 Strawberry 时,没有。

标签: perl msys strawberry-perl


【解决方案1】:

解决方案是从 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 行中指定的可执行文件。
  • 如果没有,则使用默认的(类似 POSIX 的)shell /bin/sh
    • 因此,尝试直接调用*.bat*.cmd 文件失败,因为它们没有Unix shebang 行,因此由/bin/sh 而不是cmd.exe 执行。

与 Windows 不同,这也适用于完全没有文件扩展名的(可执行)文件。

【讨论】:

    【解决方案2】:

    这在计算机的 windows 端运行良好,在 MSYS 端你可能需要

    • 检查 PATH 环境变量并修复以包含草莓 perl 访问路径

    • 检查脚本以获取 shebang 行 (#!/usr/bin/perl) 中的完整路径。 msys 中的那些绝对路径实际上是相对于 windows 中的 msys 安装目录的。 您可能需要“插入”您的草莓 perl 安装以匹配或更改 #!行

    在后一种情况下,我的建议是使用类似:#!env perl 检查 perl 解释器的环境并减轻处理 /cygdrive/c/my/windows/path/not/visible/from 的负担/msys/否则

    【讨论】:

      【解决方案3】:

      正确的 shebang 应该是,例如。 #!"C:/strawberry/perl/bin/perl.exe"。但是,您可能更喜欢使用 Perl 显式运行脚本,而不是依赖 shebang,例如。 perl script.plperl "C:\strawberry\perl\bin\cpan"

      请注意,Strawberry Perl 无法为其自己的脚本(例如 cpanperldoc )提供正确的 shebang。在https://rt.cpan.org/Public/Bug/Display.html?id=82837 报告的错误

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-24
        • 2010-12-24
        • 1970-01-01
        • 1970-01-01
        • 2012-07-18
        • 2013-09-05
        相关资源
        最近更新 更多