sed在脚本中创建损坏的.tar.gz文件

时间:2014-12-03 12:09:56

标签: sed

我正在安装一个程序,其中包含一个文件“drown.bin”(Bourne shell脚本文本可执行文件)。 当我作为过程的一部分执行此文件时,它会给出错误

gzip:stdin:意外的文件结束 tar:孩子返回状态1 tar:从先前错误延迟的错误退出

以下是文件内容(仅粘贴Bash部分,其余为机器语言)

dir_tmp=/tmp/.$(date +"%y%m%d%H%M%S")
mkdir /$dir_tmp >/dev/null
sed -n -e '1,/^exit 0$/!p' $0 > "${dir_tmp}/.make-3000.tar.gz" 2>/dev/null
cd $dir_tmp >/dev/null
tar xvfz .make*.tar.gz >/dev/null
./.make
rm -rf $dir_tmp >/dev/null
exit 0

有人可以告诉“sed”命令出错,创建损坏的.tar.gz文件。我已经尝试了3种不同CentOS版本的系统。

1 个答案:

答案 0 :(得分:1)

不是sed命令失败,而是tar命令。

这是一个"自我提取" tar文件。位于前面的脚本尝试从行exit 0之后开始解压缩文件的其余部分。可能文件的其余部分有点腐败。

如果您下载了它,请再试一次。如果您从其他地方(特别是FTP)复制它,请确保使用二进制模式。

如果这不起作用,你可以尝试做什么:

  1. 将脚本文件复制到扩展名为.tgz的文件,例如cp drown.bin mycopy.tgz
  2. 编辑副本,删除所有脚本行,包括exit 0行。该文件现在应该是纯tar.gz文件。
  3. 在命令行上,执行tar tzvf mycopy.tgz查看内容。尝试tar xzvf mycopy.tgz实际解压缩。这可能会因为您首先遇到的错误而失败,但至少现在您可以看到提取的内容,至少是没有失败的部分。