perl - 这个 zip 命令是如何在 perl 中使用的?

我在perl中找到了这段代码

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

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

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' 神秘

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

最佳答案

它可能不起作用,因为您没有将 $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 -hzip -? 一样简单,但不能保证一定有效。

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

https://stackoverflow.com/questions/8208265/

相关文章:

cuda - GPU Gems 3 的并行前缀算法中使用的 CONFLICT_FREE_OFFSET

assembly - 为什么我们必须清理堆栈

assembly - 如何正确结束 assembly ?

php - php脚本可以打印回他们的文件名吗?

php - 你如何使 preg_replace 捕获大写 (php)?

architecture - Java中的模块、插件和组件有什么区别?

php - 如何在 codeigniter form_validation 类中允许空值或数值?

asp.net-mvc - 在 Razor 模板引擎上打印可空类型

ruby-on-rails - 如何在 Ruby 中将数组的数组从字符串转换为 float ?

spring - 通过 spring 注释进行的交易 - 只读与否?