perl - 如何在 MSYS 中设置 Strawberry Perl?

标签 perl msys strawberry-perl

我有 Strawberry Perl并删除了 msys Perl 5.6。

现在perl将调用草莓(由于 PATH 环境),但我如何映射 perl .pl 中的命令或其他具有 #!/bin/perl 的 Perl 脚本文件或 #!/usr/bin/perl社邦线?

我正在考虑在 msys/bin 中对 perl.exe 进行硬链接(hard link),或者将整个草莓合并到 msys 目录中,但我不确定。

最佳答案

解决方法是在 MSYS 中创建指向 Strawberry Perl 可执行文件的符号链接(symbolic link)向 smaudet 致敬对于他的意见:

首先,删除或重命名 MSYS 安装附带的 Perl 可执行文件,如果有的话(OP 已经这样做了);例如。:

mv /usr/bin/perl /usr/bin/perl.msys 
mv /usr/bin/cpan /usr/bin/cpan.msys

然后在其位置创建一个指向 Strawberry Perl 可执行文件的符号链接(symbolic link):
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符号链接(symbolic link)已到位,带有 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 不同,这也适用于根本没有文件扩展名的(可执行)文件。

    关于perl - 如何在 MSYS 中设置 Strawberry Perl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1846176/

    相关文章:

    windows - Git for Windows (Git Bash) 中的包管理?

    mingw - MSYS 中缺少 mkdir

    perl - 如何使用 Strawberry Perl 将 Perl 脚本编译为 Windows 可执行文件?

    c - Eclipse CDT 调试不是可执行格式 : File format not recognized after strawberry installation

    perl - 带有 $ 的当前文件行号。多变的

    python - 仅将日志文件汇总为唯一条目

    msys - 如何使用 MSYS 下载文件?

    windows - 如何使用 Strawberry 在 Windows 上编译 Perl 模块?

    linux - 如何安装 Perl 脚本的依赖项?

    linux - 通过与第一列进行比较,从文本文件的行中删除所有重复的单词