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
命令会发生什么?
tar
的z
选项告诉它使用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:实现套接字编程( system() 永远不会返回)