在Windows上使用Ant为linux创建自解压bash脚本
我正在尝试使用此处讨论的方法生成自解压脚本: 使用ANT(在windows上),我使用TAR任务(gzip压缩)创建有效负载归档,并使用下面的concat任务对脚本和TAR进行concat在Windows上使用Ant为linux创建自解压bash脚本,bash,ant,tar,self-extracting,Bash,Ant,Tar,Self Extracting,我正在尝试使用此处讨论的方法生成自解压脚本: 使用ANT(在windows上),我使用TAR任务(gzip压缩)创建有效负载归档,并使用下面的concat任务对脚本和TAR进行concat <concat destfile="${output}/selfextract.bsx" append="true" eol="lf"> <fileset file="${installer}/decompress"/>
<concat destfile="${output}/selfextract.bsx"
append="true"
eol="lf">
<fileset file="${installer}/decompress"/>
<fileset file="${output}/payload.tar.gz"/>
</concat>
该文件正在创建中,似乎包含归档数据,但在我们的Red Hat机器上运行时,gzip会抱怨“压缩数据无效--违反了格式”
以前有人在这方面取得过成功吗 除非使用
fixlastline
参数(默认情况下关闭),否则不会使用eol
可能的猜测是:在“解压”脚本的末尾,在下面的\uu存档\u行后面有一行额外的代码。你不能在那里有任何额外的(甚至是空的)行,否则你将把这些字节导入tar。正如丹尼斯所说,这可能是由eol问题引起的,但我认为你必须有一个不是GNU的awk
确认的简单方法是将tail
更改为重定向到一个文件而不是tar,然后将原始tar的前几个字节和输出tar转储,以查看其中有哪些额外(或缺少)字节
最后要检查的是您是否需要在concat
中设置binary
选项
在ANT脚本的更高层,我在decompress.sh上使用了FixCRLF
任务和eol=“unix”
。默认情况下,除非添加fixlast=“false”
,否则此任务会在文件末尾添加额外的换行符
我还向concat添加了binary=“yes”
属性
我的错误是没有包括脚本的其余部分,谢谢你的帮助
最终代码:
<concat destfile="${output}/selfextract.bsx"
binary="yes">
<fileset file="${installer}/decompress"/>
<fileset file="${output}/payload.tar.gz"/>
</concat>
当问题涉及Windows和Linux混合时,我的第一反应是行尾错误。您是否尝试过在脚本文件上运行dos2unix
?eol
参数会影响所有文件中的所有行还是只影响连接边界?感谢您的帮助-最后是关于解压脚本中的eol,这是一个很好的提示。还有二进制选项。