Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows上使用Ant为linux创建自解压bash脚本_Bash_Ant_Tar_Self Extracting - Fatal编程技术网

在Windows上使用Ant为linux创建自解压bash脚本

在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"/>

我正在尝试使用此处讨论的方法生成自解压脚本:

使用ANT(在windows上),我使用TAR任务(gzip压缩)创建有效负载归档,并使用下面的concat任务对脚本和TAR进行concat

<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,这是一个很好的提示。还有二进制选项。