1

我正在 Windows 上安装 Bugzilla,并且 checksetup.pl 要求我通过运行 ppm(Perl 包管理器)命令来安装一堆模块,如下所示:

C:\>ppm install TimeDate

这运行正确,并安装 TimeDate 模块。

我以前没有做过太多命令行的事情,但我认为这是尝试它的好时机。所以我制作了一个名为 PerlModules.bat 的批处理文件:

ppm install Chart
ppm install Template-GD
ppm install MIME-tools
ppm install XML-Twig
ppm install PatchReader
ppm install perl-ldap
ppm install Authen-SASL
ppm install RadiusPerl
ppm install SOAP-Lite
ppm install JSON-RPC
ppm install JSON-XS
ppm install Test-Taint
ppm install HTML-Scrubber
ppm install Email-MIME-Attachment-Stripper
ppm install Email-Reply
ppm install TheSchwartz
ppm install Daemon-Generic
ppm install mod_perl
ppm install Apache-SizeLimit
ppm install Math-Random-Secure
ppm install TimeDate
ppm install DateTime
ppm install DateTime-TimeZone
ppm install Template-Toolkit
ppm install Email-Send
ppm install Email-MIME

运行它会产生以下输出:

E:\Program Files\Bugzilla>PerlModules.bat

E:\Program Files\Bugzilla>ppm install Chart
Downloading Chart-2.4.6...done
Unpacking Chart-2.4.6...done
Generating HTML for Chart-2.4.6...done
Updating files in site area...done
  18 files installed

E:\Program Files\Bugzilla>

所以看起来只有批处理文件的第一行实际运行,其余的什么都不做。

最后我查看了 ppm 的手册页,ppm help发现我可以一次传递所有的包名,省去了解决这个问题的麻烦,但我真的不明白为什么我的小批处理文件不起作用.

我认为批处理文件只是逐行输入到 shell 提示符,等到每个都完成它的工作,直到它们到达文件末尾。我在这个等式中缺少什么?

4

1 回答 1

3

在我的 Perl 安装中,命令ppm是一个批处理文件:(ppm.bat不是 .exe

当您从另一个调用一个批处理文件时,调用的批处理文件与被调用的批处理文件一起终止。

您需要使用call才能从一个批处理文件中运行另一个批处理文件。

调用 ppm install 图表
调用 ppm install Template-GD
调用 ppm install MIME-tools
调用 ppm 安装 XML-Twig
调用 ppm 安装 PatchReader
于 2013-05-14T11:03:20.517 回答