如何在perl中使用此zip命令?

时间:2011-11-21 06:55:50

标签: perl zip

我在perl中找到了这段代码

system("zip $ZIP_DEBUG -r -9 itvlib.zip $include $exclude");

但是我不明白它是如何工作的。我的意思是system()用于解雇'系统'命令吗?那么这个'zip'命令在这里使用了'system'命令吗? 但我尝试在命令提示符下触发以下内容;

zip $ZIP_DEBUG -r -9 itvlib.zip arg1 arg2

它不起作用! 它给出了以下错误:

'zip' is not recognized as an internal or external command,
operable program or batch file.

这应该不会发生,因为命令似乎使用'zip'作为系统命令。所以这使命令'zip'神秘

请帮助我理解这个命令及其所有参数?

3 个答案:

答案 0 :(得分:6)

由于您没有使用等效的真实值替换$ZIP_DEBUG之类的内容,因此可能无法正常工作。在Perl中,在传递给system调用之前,它们将被变量的值替换。

如果在执行system调用之前打印出这些Perl变量(甚至整个命令),您将找到需要使用的那些真实值。您可以使用以下成绩单来指导您:

$ perl -e '
>     $ZIP_DEBUG = "xyzzy";
>     $include = "inc_files";
>     $exclude = "exc_files";
>     print "zip $ZIP_DEBUG -r -9 itvlib.zip $include $exclude";
> '
zip xyzzy -r -9 itvlib.zip inc_files exc_files

有关system工作原理的详细信息,请参阅here。有关zip需要运行的详细信息,您应该能够运行:

man zip

来自命令行shell(假设您使用的是Linux或其兄弟)。相反,如果您使用的是其他操作系统(如Windows),则必须弄清楚如何获取zip选项。这个可能就像zip -?的{​​{1}}一样简单,但不保证会有效。

如果它与Linux下的Info-ZIP zip -h相同(如果您有zip-9选项,那么您的-r变量可能会以exclude),然后-x将为您提供基本帮助,zip -h会为您提供更多帮助。

答案 1 :(得分:5)

system("zip $ZIP_DEBUG -r -9 itvlib.zip $include $exclude");

正在路径上的某个位置运行名为zip(可能是zip.exe)的程序。 $ZIP_DEBUG$include$exclude是在运行命令之前插入命令行的Perl变量。

如果system调用在Perl脚本中有效,但zip -?给出了'zip' is not recognized as an internal or external command, operable program or batch file错误,那么Perl脚本的PATH必须与命令提示符中的PATH不同。或者,当Perl执行zip命令时,当前目录中可能有system命令。 (在Windows中,当前目录是PATH的隐式成员。)

要查看PATI对Perl脚本的作用,可以在系统命令之前添加print "$ENV{PATH}\n";。要查看命令提示符中的PATH,请键入PATH

答案 2 :(得分:3)

是的,zip是一个系统命令。变量$ZIP_DEBUG等是在启动zip之前内插到命令的perl变量。

要调试实际调用的内容,请尝试添加:

print("zip $ZIP_DEBUG -r -9 itvlib.zip $include $exclude\n");

有关system的详细信息,请参阅perldoc