Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修改cygwin环境以使用草莓Perl而不是打包的Perl发行版?_Perl_Cygwin_Environment Variables_Strawberry Perl - Fatal编程技术网

如何修改cygwin环境以使用草莓Perl而不是打包的Perl发行版?

如何修改cygwin环境以使用草莓Perl而不是打包的Perl发行版?,perl,cygwin,environment-variables,strawberry-perl,Perl,Cygwin,Environment Variables,Strawberry Perl,我目前将其用作我的主要Perl发行版。但是,我有一些应用程序通过cygwin进行Perl调用。它们通常会失败,因为它们调用的是与cygwin一起打包的Perl版本,并且只查看cygwin的lib文件夹。我如何修改cygwin环境来调用草莓Perl(并使用C:/草莓/Perl/lib dirs)呢?我附近没有cygwin机器,所以我无法测试这一点,但也许你可以用一个脚本将Perl命令前端化:转到cygwin下的/bin并将Perl.exe移动到其他类似Perl-org.exe的位置,然后设置一个s

我目前将其用作我的主要Perl发行版。但是,我有一些应用程序通过cygwin进行Perl调用。它们通常会失败,因为它们调用的是与cygwin一起打包的Perl版本,并且只查看cygwin的lib文件夹。我如何修改cygwin环境来调用草莓Perl(并使用C:/草莓/Perl/lib dirs)呢?

我附近没有cygwin机器,所以我无法测试这一点,但也许你可以用一个脚本将Perl命令前端化:转到cygwin下的/bin并将Perl.exe移动到其他类似Perl-org.exe的位置,然后设置一个shell脚本,用相同的参数执行其他perl。

如果使用安装程序从cygwin中删除perl,默认情况下它将使用草莓perl

如果无法从cygwin中删除Perl,则可以创建一个符号链接,指向来自草莓的Perl可执行文件

从cygwin外壳中,使用以下命令集:

$ mv /usr/bin/perl /usr/bin/perl-cygwin
$ ln -s /cygdrive/c/strawberry/perl/bin/perl.exe /usr/bin/perl
这是假设您使用了默认的草莓Perl安装程序。如果在其他地方安装了
perl.exe,请相应地更新其位置

通过检查Perl版本,检查以确保链接正常工作:

$ perl -v

应该说这是为MSWin32-x86-multi-thread(或类似)构建的perl(版本),而不是为cygwin-thread-multi-64int构建的。草莓试图通过将其目录放在路径的末尾来表现友好。但是,如果您是从.zip文件安装的,它根本不会更改路径


您可以移动/usr/bin/perl,但这不是一个好主意,因为当cygwin试图更新它认为是它的perl时,它会中断。这周我刚遇到过这种情况,在我的Mac电脑上也曾遇到过这种情况,直到我停止使用系统设置并完全独立地安装了我自己的东西。

这可能不是首选的解决方案,但你应该能够修改#!行:


我总是引用perl的显式位置和安装,而不是依赖于/usr/bin中的内容。

我有两个脚本,用于将perl脚本的第一行修改为路径中的第一行perl:现在在$path中的第一行perl的硬代码,将该行更改为#/usr/bin/env perl,因此只在调用脚本时选择要使用的perl。在Cygwin下(通常在Unix shell中)工作得非常好。

我可以补充的一个好处是,如果您在路径中首先找到了正确的perl,它应该能够处理您可能安装的特定于站点的CPAN模块,并且在CMD shell中运行草莓perl

“哪个perl”是您的朋友

如果在这方面遇到问题,可以设置PERL5LIB环境变量,但这不是必需的

我仍然将DOS风格的文件路径作为参数传递到perl脚本中,即“d:\data\myfile.txt”,而不是“/cygdrive/d/data/myfile.txt”。奇怪的是,这种混合的路径表示法有效:


bash>/cygdrive/d/scripts/myscript.pl d:\data\myfile.txt

如果您不想弄乱任何路径或做任何永久性的事情,有一个简单的临时黑客。在Cygwin sh提示符处键入“where perl”。它将按执行顺序列出它在路径中看到的所有Perl.exe。更改在要使用的perl之前列出的不希望被看到的名称。但是,请记住在完成后将它们更改回来,否则您可能会遇到一些问题。

其中许多都是很好的解决方案,但我选择了一个简单的解决方案,我不需要多次修改

您只需在.bashrc文件中添加/修改一行即可

# Prepend strawberry perl to cygwin's path
export PATH=/cygdrive/C/Tools/Perl/perl/bin:$PATH
从shell中获取.bashrc文件(或启动新的shell)并运行程序

source ~/.bashrc
perl script.pl 

美好的非常有帮助。。谢谢。我知道这是很久以前的事了,但是非常感谢。这间接地帮助我解决了一个我两天来一直试图解决的问题。我需要从cygwin执行草莓perl安装,因为我需要草莓模块,但我需要cygwin正确解释程序的linux命令(ex“mv”)。这是最佳实践明智的正确答案;o) ,但有些人需要几年才能意识到这一点;o)
source ~/.bashrc
perl script.pl