我正在安装一个程序,其中包含一个文件“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版本的系统。
答案 0 :(得分:1)
不是sed
命令失败,而是tar
命令。
这是一个"自我提取" tar文件。位于前面的脚本尝试从行exit 0
之后开始解压缩文件的其余部分。可能文件的其余部分有点腐败。
如果您下载了它,请再试一次。如果您从其他地方(特别是FTP)复制它,请确保使用二进制模式。
如果这不起作用,你可以尝试做什么:
cp drown.bin mycopy.tgz
exit 0
行。该文件现在应该是纯tar.gz文件。tar tzvf mycopy.tgz
查看内容。尝试tar xzvf mycopy.tgz
实际解压缩。这可能会因为您首先遇到的错误而失败,但至少现在您可以看到提取的内容,至少是没有失败的部分。