perl 中的 system("tar xzf DirName/tarFile.tar DirNameInsideTar/FileName") 失败并返回 -1

Posted

技术标签:

【中文标题】perl 中的 system("tar xzf DirName/tarFile.tar DirNameInsideTar/FileName") 失败并返回 -1【英文标题】:system("tar xzf DirName/tarFile.tar DirNameInsideTar/FileName") in perl fails and returns -1 【发布时间】:2016-07-13 22:21:35 【问题描述】:

-1 的 tar 退出代码是什么意思?我正在使用命令

system("tar xzf DirName/tarFile.tar DirNameInsideTar/FileName") 

从 perl 脚本中解压。我正在尝试解压缩大约 1000 个 tar 文件,但有时在解压缩 100 个或有时 500 个 tar 文件后随机解压缩系统命令失败并返回 -1。我检查了代码的内存使用情况和可用的磁盘空间,看起来都很好。有谁知道错误可能是什么?

【问题讨论】:

当它遇到错误时,它应该在标准错误上打印一条错误消息。 我们无法知道它可能是什么,有很多可能的错误原因。 如果您手动尝试完全相同的tar 命令会发生什么? tarz 选项告诉它使用gzip,但.tar 后缀暗示它是一个未压缩的tar 文件。 "tar exit code of -1"是什么意思?您显示的代码不会给您tar 的退出代码。如果system 返回除0 以外的任何内容,没有 告诉您tar 的工作方式,它只会告诉您命令本身运行不正常。你能告诉我们所有相关的代码吗? 【参考方案1】:

system 返回-1 时,$! 包含错误消息。

system("tar xzf DirName/tarFile.tar DirNameInsideTar/FileName");

die("Can't execute command: $!\n")              if $? == -1;
die("Child killed by signal ".($? & 0x7F)."\n") if $? & 0x7F;
die("Child exited with error ".($? >> 8)."\n")  if $? >> 8;

system返回的值也可以是$?。)

【讨论】:

以上是关于perl 中的 system("tar xzf DirName/tarFile.tar DirNameInsideTar/FileName") 失败并返回 -1的主要内容,如果未能解决你的问题,请参考以下文章

在 perl 中创建和读取 tar.bz2 文件

Perl:实现套接字编程( system() 永远不会返回)

如何使用 Perl 的 Archive::Tar 保存 tar 档案中的 setuid 位?

为啥 Perl 的 Archive::Tar 内存不足?

在 perl 中提取 tar.gz 文件

您可以从 Perl 中的 .tar.bz2 存档中逐行流式传输文件吗?