我正在尝试使用以下Ant任务来自解压文件:
...
<fixcrlf file="${src.dir}/scripts/install.sh" eol="unix"/>
<concat destfile="${build.dir}/my_program.exe" binary="yes">
<fileset file="${src.dir}/scripts/install.sh" />
<fileset file="${build.dir}/program.tar.gz" />
</concat>
..和my_program.exe看起来像这样:
#!/bin/bash
begin=`head -30 $0 | grep -n ^START | cut -d ':' -f -1` # find line number of the marker
start=$(($begin+1)) # beginning of the binary archive which will be extracted
echo $start
...
START
#binary file starts
当我运行my_program.exe时,出现以下错误:
./my_program.exe: line 4: Binary file (standard input) matches: syntax error in expression (error token is "file (standard input) matches")
tail: +: invalid number of lines
当我单独运行install.sh时,它找到行号就好了。
我的猜测是Ant任务有问题。我是否会错过一些可以修复它的属性?
答案 0 :(得分:4)
我猜您应该使用-a
(分别为--text
,意思是处理二进制文件,就好像它是文本)选项grep
。否则grep
只会输出"Binary file matches"
。
所以第4行应该是:
begin=`head -30 $0 | grep -na ^START | cut -d ':' -f -1` # find line number of the marker