2009-12-04 23 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中,這也適用於那些沒有擴展名都(可執行文件)文件。

相關問題