我在安装了cygwin的Windows机器上调用来自ANT build.xml的shell脚本。脚本被调用,初始echo语句正在脚本中执行。但它在脚本中的'sed'或'find'等语句中抛出错误。当我直接在cygwin中执行脚本时,它已成功执行。在从ANT调用它时,它会发生错误并且构建失败。我从build.xml调用shell脚本,如下所示:
<target name="xml2prop"
description="exec shell script"
>
<exec dir="." executable="C:\cygwin\bin\bash" osfamily="windows">
<arg value="C:\script\testscript.sh"/>
<arg value="${root}"/>
</exec>
</target>
shell脚本代码如下:
if [ $# -lt 1 ]
then
echo "error"
else
echo "\$1 is \"$1\" and total args to $0 are $# "
rt="${1//\\//}"
echo $rt
fi;
find "$rt" -name "*.xml" |
while read xmlfile
do
echo "$xmlfile";
done
我得到的错误如下
[exec] $1 is "C:\new\test" and total args to C:\script\testscript.sh are 1
[exec] C:/new/test
[exec] FIND: Parameter format not correct
你能帮我解决一下这个问题吗?
答案 0 :(得分:1)
你的道路是什么样的?看起来该脚本实际上正在运行windows find.exe。使用绝对路径来调用命令可能是个好主意
FIND_CMD=/bin/find
ANOTHER_COMMAND=/usr/bin/find
//assert find command exists
if [ ! -x $FIND_CMD ]
echo "not found command "
exit 1;
fi
if [ $# -lt 1 ]
then
echo "error"
else
echo "\$1 is \"$1\" and total args to $0 are $# "
rt="${1//\\//}"
echo $rt
fi;
$FIND_CMD "$rt" -name "*.xml" |
while read xmlfile
do
echo "$xmlfile";
done
通常避免从ant调用特定于平台的脚本。编写java任务或程序要容易得多。
答案 1 :(得分:0)
我认为您在Windows Shell中运行脚本而不是在Cygwin中运行。在这种情况下,您将调用Windows附带的FIND并获得您报告的确切错误。
我会看看你是如何运行你的脚本并确保你正在调用正确的Cygwin shell来运行你的脚本。