焦油-xvzf $文件名.tar.gz || {$退出?; }

在这里我的脚本将退出与141的errorCode我使用的Fedora Core 6焦油1.15版

它不会发生的时间,但它不能的时间的70%以上。

有帮助吗?

解决方案 3

由于我们现在正在使用的归档的cpio一种解决方法,现在我们工作得很好,但我想知道为什么焦油是造成这个问题,它的周围很长一段时间,并且被作为标准工具多年。

其他提示

我知道这个线程是超过数多岁,但我评论对那些在此线程与错误谁绊倒人。

每当使用一个压缩选项,焦油隐含打开以使用管底层程序的连接。因此,在OP的例子:tar -xvzf $filename.tar.gz,什么焦油将其实做的就是运行与此类似:gunzip $filename.tar.gz | tar -xv -。您可以通过运行一个top,在那里你会看到两个过程(一个用于焦油和一个gzip的)验证这一点。

虽然有时,管道本身断裂。例如,如果该文件不是gzip文件。借此例如:tar -xvzf somefile.iso,这将等同于gunzip somefile.iso | tar -xv -。在这种情况下,gzip的会报错了。 gzip压缩时出现了错误,该管道将打破。另一种可能性是,如果gzip文件是正确的,但它里面的tar文件已损坏。在这种情况下,Gzip已开始未压缩数据流发送到焦油,但随后焦油意识到什么是错的,并关闭该流。然后在这里的gzip将错误输出,因为它的输出被关闭。

在退出值,超过128的值指示终止由于信号,和上述128只表示该信号所引起的终止的量。所以,如果我们从141 OP的退出代码减去128,我们得到13,其对应于SIGPIPE(man 7 signal为标准信号和它们的相应整数值的列表)。

在男子页列出的“破管道:写入管道没有读者” SIGPIPE的评论。那么,它会出现的gzip试图写入到管道,但焦油已停止听。在这里,我的猜测是,Gzip已成功解压缩文件,但是未压缩的流不是有效的tar归档。在这里,我的建议是要对文件运行gunzip解,然后运行的结果文件焦油,看看哪一个失败(基于SIGPIPE,在这里我的猜测是,焦油会失败)。在这两种情况下,它看起来像该文件是不是由这些版本的工具(无论是损坏或某种形式的版本冲突)可读。

这些文件是如何形成的(什么选项,焦油等)? 他们在本机或其他机器上创造的呢? 如果您在本机上创建一个.tar.gz文件,可以在此同一台机器上提取没有错误的文件?

GNU焦油只返回几件事情,他们没有被-141的。然而,如果它的运行的子进程,如gzip和该进程异常终止时,它返回返回代码。

我不知道是什么子可能是虽然。与--verbose尝试一下,看看你得到任何线索。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top