表达式中的Shell脚本语法错误

时间:2011-06-06 14:59:37

标签: bash shell unix ksh

我正在尝试使用以下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任务有问题。我是否会错过一些可以修复它的属性?

1 个答案:

答案 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