我已经在Windows计算机上设置了本地Perl Web环境。 我正在使用的应用程序最初来自Linux服务器,因此源.pl文件的显示如下所示:

#!/usr/bin/perl

这会在Windows开发机上导致以下错误:

(OS 2)The system cannot find the file specified.

是否可以更改我的Apache 2 conf,以便在Windows计算机上忽略shebang? 当然,我可以将shebang设置为#!c:\perl\bin\perl.exe,这很明显。 但是问题在于部署更新的文件。 显然,在每次部署时都将其改回来是非常不便的。 我在Windows 7上使用ActivePerl。

更新:

我应该提到,我需要保持警惕,以便脚本可以在我们共享的托管Linux生产服务器上运行。 如果我没有此约束并且不必使用shebang,那么显而易见的答案就是不使用它。

您的许多问题都遭受了XY问题(perlmonks.org/index.pl?node_id=542341)。 您问自己认为解决方案是什么,而不是问问题。 在这种情况下,我认为您实际上不需要跨平台的Shebang线,而只需要一个适用于Windows 7的ActivePerl(使用Apache 2)的线即可。

@brian太棒了! 谢谢你的提示。 我一直都知道我这样做,这就是问题所在。 我将在以后的答案中尝试询问问题,而不是已经下定决心了。

好了,既然您已经更改了问题,那么它变得容易得多:您无需在脚本中添加shebang行。 除非您希望系统找出要调用的解释器,否则就不需要它。 在你的情况下那没关系。

@brian问题已更新。

我在脚本中使用#!/usr/bin/perl,并在Windows上配置Apache以忽略shebang行。加

ScriptInterpreterSource Registry-Strict

到httpd.conf并按照Apache文档中的说明设置Windows注册表项。

这是导出密钥时得到的:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.pl\Shell\ExecCGI\Command]

@="c:\\opt\\perl\\bin\\perl.exe"

我一直在Windows笔记本电脑上使用Apache和ActiveState Perl以及在服务器上使用ArchLinux附带的Apache和Perl发行版来使用此设置。

Apache文档(我在上面链接到该文档)指出:

The option Registry-Strict which is new in Apache 2.0 does the same thing as Registry but uses only the subkey Shell\ExecCGI\Command. The ExecCGI key is not a common one. It must be configured manually in the windows registry and hence prevents accidental program calls on your system. (emphasis mine)

根据文档的建议,我已经在所有情况下尝试了此操作:server config, virtual host, directory, .htaccess-但这似乎无法解决错误,我该怎么办?

是的,我已经重新启动。我正在使用ActivePerl,所以我不知道,我需要寻找什么注册表项?我在DocumentRoot下方的httpd.conf中使用指令(默认配置行177)。

谢谢,我用REG_SZ值C:\Perl\bin\perl.exe -wT添加了键HKEY_CLASSES_ROOT\.pl\Shell\ExecCGI\Command,它可以正常工作!

没有便携式的Shebang线。即使在相同的平台和体系结构上,也可能有人在不同的位置安装了perl。

诀窍是不要手动安装模块和脚本。当您将所有内容打包为发行版并使用模块工具链时,shebang行会自动修改为指向您用于安装所有内容的perl。您不必考虑这些细节。 :)

我无法使用此解决方案,因为在没有shebang的情况下,.pl文件不会在共享Linux托管服务器上执行。不幸的是,我无法更改服务器配置。如果是这种情况,我会为Perl添加一个Apache处理程序。另外,该站点上有许多使用shebang的现有.pl脚本-如果我对Perl Id更有信心,可以更改此设置,但是可以说,我不想踩任何人的脚趾。

好吧,您不必在两个安装上都使用相同的shebang行。正确的安装将为您解决问题。

无论在* nix还是Windows上,我在所有perl上都使用#! /usr/bin/env perl作为shebang。 Windows只会忽略它,而Unixen会跟随env进入所选的perl disto。

在win7及更高版本中,您也可以使用" dos"命令mklink进行此操作。

以管理员身份启动cmd shell,然后执行以下操作:

mklink /d c:\usr c:\Perl       # Activestate perl in c:\Perl\bin\perl.exe

mklink /d c:\usr c:\xampp\perl # Xampp perl in c:\xampp\perl\bin\perl.exe

我的工作方式是将perl.exe复制到c:/ usr / bin /并将其重命名为perl(剥离.exe)

安装任何Windows Bash版本(例如Cygwin,MSYS2或GnuWin32);

创建一个简单的重定向shell脚本:

创建一个注册表项:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.cgi\Shell\ExecCGI\Command]

@=""

[HKEY_CLASSES_ROOT\.pl\Shell\ExecCGI\Command]

@=""

[HKEY_CLASSES_ROOT\.py\Shell\ExecCGI\Command]

@=""

(...等等。)

记下您的httpd.conf文件:

ScriptInterpreterSource Registry

现在,Apache将根据您选择的Bash风格给出的解释来解决Unix shebang的问题。与在注册表中对解释器路径进行硬编码相比,这提供了更大的灵活性。

我没有Windows,但是Perlcritic说:

my $desc = q{Found platform-specific perl shebang line};

my $expl = q{Perl source in parrot should use the platform-independent shebang line: #! perl};

因此,我想#! perl应该可以。

编辑:在linux上不起作用;显然可以在parrot中使用,尽管我看不到他们是如何管理的。

#! perl在我们的Linux服务器上不起作用,但是在我的本地Windows开发机器上可以正常工作。不管怎么说,还是要谢谢你。

是的,我猜它仅适用于parrot。抱歉。

计算机术语shebang,如何在Windows下使用Apache 2忽略Perl shebang?相关推荐

  1. 如何在windows下让apache支持asp,通过iasp

    相关资源下载地址: iAsp2---http://download.csdn.net/source/1012064 / http://www.javatang.com/_download/iasp.r ...

  2. macos支持exfat吗_[启动盘制作]如何在 Windows 下制作苹果 macOS 启动盘

    to 知乎管理员: 此前本文被删, 专门写了篇文章反映问题:关于安装实录-windows下如何制作苹果安装盘文章被删的声明 现按照要求改写文章, 如果再删, 烦劳注明原因. 步入正题: 苹果的镜像格式 ...

  3. mysql数据库安装以及登录(如何在windows下安装mysql数据库,以及解决mysql8登录报错问题,绝对是保姆级别的,不要错过哦)

    目录 概述 MySQL的卸载(选看) 停止MySQL服务 软件的卸载 方式1:通过控制面板方式 方式2:通过360或电脑管家等软件卸载 方式3:通过安装包提供的卸载功能卸载 残余文件的清理 清理注册表 ...

  4. 如何在windows下安装cygwin

    如何在windows下安装cygwin 转载于:https://www.cnblogs.com/zhujiabin/p/5747580.html

  5. 如何在Windows下发布QT应用程序

    如何在Windows下发布QT应用程序 [环境介绍] [操作系统]:Windows 10 64bit [IDE套件]:QT Creator 4.8.0 [编译器版本]:QT5.12.0 MSVC201 ...

  6. 如何在Windows下强制git使用LF而不是CR + LF?

    本文翻译自:How do I force git to use LF instead of CR+LF under windows? I want to force git to checkout f ...

  7. 如何在 Windows 下创建 macOS 引导介质 (USB 启动盘)

    请访问原文链接:如何创建可引导的 macOS 安装介质,查看最新版.原创作品,转载请保留出处. 作者主页:www.sysin.org 完整版请参看:如何创建可引导的 macOS 安装介质 补充章节: ...

  8. 【实用】如何在windows下快速截图?

    如何在windows下快速截图? 快速截图是很多人的需求.截图的工具和方案也很多,但是,这里给出一个通用的,被大众认为最高效的一个解决方案. 我们都知道键盘上有一个"prt sc" ...

  9. 如何在Windows下利用Apche查看MySQL数据库?

    本篇文章主要跟大家介绍的是如何在Windows下利用Apche查看MySQL数据库,小杜觉得挺实在的,就整理了一下并分享给大家做个参考,希望大家看完之后有一定的收获.因此,有感兴趣的朋友记得要看完! ...

最新文章

  1. 2018未来科学大奖揭晓:袁隆平、马大为、林本坚等7位科学家获奖
  2. 推荐7款好用的cmd命令行终端工具
  3. Linux软raid创建和维护
  4. JDK 11版本时间表
  5. JMS ActiveMQ研究文档
  6. ExtJS 开发调试工具大全
  7. SliverLight Web part
  8. 【ORACLE】20道Oracle运维常见面试题
  9. python代码规范工具_如何检查python3中的代码规范
  10. 重载(overload)与重写(override)的区别
  11. 手把手带你深入解析静态分派 动态分派原理 | 原力计划
  12. latex 上标 下标怎么打
  13. PROC SUMMARY
  14. PCL点云库(2) — IO模块
  15. 【刘文彬】【源码解读】EOS测试插件:txn_test_gen_plugin.cpp
  16. 电视屏幕太伤眼,五个地方降低亮度,来缓解眼睛痛.
  17. 深度Linux拨号软件,Deepin调校及相关资源、常用软件整合贴
  18. 在html中加入pdf文件吗,如何在网页中显示PDF文件
  19. 20.深度解密二十:通过搜索引擎进行淘宝客营销玩法
  20. 学习笔记,初学者对继承、接口的习题练习: 模拟给所有员工发工资定义员工Employee类,经理Manager类继承Employee类,职员Clerk类继承Employee类。

热门文章

  1. #Windows server 2019搭建辅助域控服务器
  2. 2023最新装修材料石膏线品牌加盟类模板源码+织梦内核开发的
  3. Learn OpenGL 笔记6.7 HDR(高动态范围)
  4. 大众点评(最新字体反爬)
  5. 危害肠道健康的两大敌人:诺如病毒和轮状病毒
  6. C语言中空格符,制表符,换行符详解
  7. C语言-编写函数统计输入文本中单词的个数,单词之间用空格符、换行符、跳格符隔开,用@作为输入结束标志。
  8. 北京VS上海:活着为了工作还是工作为了生活?
  9. 计算机科技文化节答辩活动主持稿,校园宿舍文化节活动主持词范例
  10. Java中计算范围时间内有几周并返回每周起止日期