如何在 MSYS 中设置 Strawberry Perl?

问题描述 投票:0回答:3
我有

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

perl msys strawberry-perl
3个回答
4
投票
解决方案是

从 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 不同,这也适用于根本没有文件扩展名的(可执行)文件。

这在计算机的 Windows 端工作得很好,在 MSYS 端你可能需要

0
投票

检查 PATH 环境变量并修复以包含草莓 Perl 访问路径
  • 检查脚本中 shebang 行的完整路径 (#!/usr/bin/perl)。 msys 中的那些绝对路径实际上是相对于 windows 中的 msys 安装目录的。 您可能需要“插入”您的草莓 Perl 安装以匹配或更改 #!线
  • 在后一种情况下,我的建议是使用类似:
  • #!env perl
检查 perl 解释器的环境并减轻处理 /cygdrive/c/my/windows/path/not/visible/from/msys 的负担/否则


正确的 shebang 是,例如。

0
投票
。但是,您可能更喜欢使用 Perl 显式运行脚本,而不是依赖 shebang,例如。

perl script.pl

perl "C:\strawberry\perl\bin\cpan"


请注意,Strawberry Perl 没有为自己的脚本提供正确的 shebang,例如 
cpan

perldoc

 。错误报告于 
https://rt.cpan.org/Public/Bug/Display.html?id=82837
 

© www.soinside.com 2019 - 2024. All rights reserved.