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

Cha*_*ani 1 perl zip

我在perl中找到了这段代码

system("zip $ZIP_DEBUG -r -9 itvlib.zip $include $exclude");
Run Code Online (Sandbox Code Playgroud)

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

zip $ZIP_DEBUG -r -9 itvlib.zip arg1 arg2
Run Code Online (Sandbox Code Playgroud)

它没用!它给出了以下错误:

'zip' is not recognized as an internal or external command,
operable program or batch file.
Run Code Online (Sandbox Code Playgroud)

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

能帮我理解这个命令及其所有参数吗?

pax*_*blo 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
Run Code Online (Sandbox Code Playgroud)

有关system工作原理的详细信息,请参见此处.有关zip需要运行的详细信息,您应该能够运行:

man zip
Run Code Online (Sandbox Code Playgroud)

从命令行shell(假设您在Linux或其兄弟).相反,如果您使用的是其他操作系统(如Windows),则必须弄清楚如何获取zip选项.这可能很简单zip -?,zip -h但无法保证可行.

如果它与zipLinux下的Info-ZIP相同(如果你有-9-r选项,并且你的exclude变量以它开头-x),那么zip -h它将为你提供基本的帮助,zip -h2并会给你更多.


cjm*_*cjm 5

system("zip $ZIP_DEBUG -r -9 itvlib.zip $include $exclude");
Run Code Online (Sandbox Code Playgroud)

正在路径上的某个地方运行一个名为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不同.或者,zip当Perl执行system命令时,当前目录中可能存在命令.(在Windows中,当前目录是PATH的隐式成员.)

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