2009-12-04 26 views
8

我有Strawberry Perl并删除了msys Perl 5.6。如何在MSYS中设置Strawberry Perl?

现在perl将调用草莓(由于PATH ENV),但我怎么在其中有#!/bin/perl#!/usr/bin/perl家当线.pl或其他Perl脚本文件映射perl命令?

我想制作一个硬连接到perl.exe所在MSYS /箱或合并整个草莓的MSYS目录里面,但我不知道。

回答

0

本精美的作品在计算机上的窗户边,在MSYS方面,你可能需要

  • 检查PATH环境变量和修复包括草莓perl的访问路径

  • 检查shebang行(#!/ usr/bin/perl)中完整路径的脚本。 在msys中绝对的那些路径实际上是相对于Windows中的msys安装目录的。 你可能需要“塞”你的草莓Perl安装来匹配或更改#!在后一种情况下,线

我的建议是使用类似:#!env perl,检查环境的Perl解释器,减轻处理/ cygdrive/C /我的/窗/路径的负担/不/可见/从/ msys /否则

0

正确的shebang将是,例如。 #!"C:/strawberry/perl/bin/perl.exe"。但是,您可能更愿意使用Perl明确运行脚本,而不是依靠shebang,例如。 perl script.plperl "C:\strawberry\perl\bin\cpan"

注意,草莓Perl不会得到正确的认领为自己的脚本,如cpanperldoc。错误报道https://rt.cpan.org/Public/Bug/Display.html?id=82837

3

的解决方案是从内部MSYS提示帽子的创建符号链接到草莓Perl可执行文件到smaudet为他输入

首先,删除或重命名Perl的可执行文件(如果有的话)(OP已经完成了);例如:

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

然后在其位置创建符号链接到草莓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符号链接的地方,家当线#!/usr/bin/perl#!/bin/perl现有脚本将再次合作(后者也适用,因为/bin/usr/bin在MSYS中实际上是相同的位置)。

注意,与更灵活的家当线#!/usr/bin/env perl编写的脚本做需要这个,因为env直接找到草莓Perl的perl.exe路径。


一些背景

Unix的仿真环境,如MSYS和Cygwin做对于Windows的%PATHEXT%变量,以确定哪些可执行文件调用(非二进制)与文件。换句话说:文件扩展名对于执行没有意义。

相反,他们完全由文件是否具有认领线去:

  • 如果有一个,在家当行中指定的可执行文件中。
  • 如果没有,则使用默认(类POSIX)shell /bin/sh
    • 因此,试图调用*.bat*.cmd文件直接失败,因为他们没有一个Unix家当线,因此受到/bin/sh而不是cmd.exe执行。

不像在Windows中,这也适用于那些没有扩展名都(可执行文件)文件。

相关问题