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

sed在脚本中创建损坏的.tar.gz文件,sed,Sed,我正在安装一个程序,它有一个文件“crowd.bin”(BourneShell脚本文本可执行文件)。 当我将此文件作为进程的一部分执行时,它会给出错误消息 gzip:stdin:意外的文件结尾 tar:返回的子项状态1 tar:由于以前的错误而延迟的错误退出 下面是文件内容(仅粘贴Bash部分,其余为机器语言) 有人能告诉我“sed”命令在创建损坏的.tar.gz文件时出现了什么问题吗。我已经试用了3个不同CentOS版本的系统。失败的不是sed命令,而是tar命令 这是一个“自解压”tar文件

我正在安装一个程序,它有一个文件“crowd.bin”(BourneShell脚本文本可执行文件)。 当我将此文件作为进程的一部分执行时,它会给出错误消息

gzip:stdin:意外的文件结尾 tar:返回的子项状态1 tar:由于以前的错误而延迟的错误退出

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


有人能告诉我“sed”命令在创建损坏的.tar.gz文件时出现了什么问题吗。我已经试用了3个不同CentOS版本的系统。

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

这是一个“自解压”tar文件。位于前面的脚本尝试解压缩文件的其余部分,从第
行退出0
之后开始。文件的其余部分可能已损坏

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

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

  • 将脚本文件复制到扩展名为.tgz的文件中,例如
    cp crown.bin mycopy.tgz
  • 编辑副本,删除所有脚本行,包括
    退出0
    行。该文件现在应该是一个纯tar.gz文件
  • 在命令行上,执行tar tzvf mycopy.tgz以查看内容。尝试
    tar xzvf mycopy.tgz
    实际解包。这很可能会失败,与您第一次遇到的错误相同,但至少现在您可以看到提取的内容,至少是没有失败的部分

  • 文件$0的类型是什么?为什么不使用gtar或tar命令而不是sed?@almasshaikh sed命令试图提取脚本后面的tar.gz内容。当这一切完成后,焦油被用来实际解封焦油。归结为从包含script+tar.gz数据的文件中执行“自提取”过程。尝试从tar命令中删除“>/dev/null”以查看所有输出,可能会提供更多线索。还可以尝试在命令中使用整个文件名,而不是*,即tar xvfz.make-3000.tar.gz。结果与您预测的完全一致。文件绝对是坏的。我将得到一份新的副本并进行测试。谢谢
    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