我在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'神秘
请帮助我理解这个命令及其所有参数?
答案 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。