1

我在安装了 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

你能帮我找出问题吗?

4

2 回答 2

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 任务或程序要容易得多。

于 2012-10-09T07:49:18.027 回答
0

我认为您是在 Windows Shell 中而不是在 Cygwin 中运行脚本。在这种情况下,您将调用 Windows 附带的 FIND 并获得您报告的确切错误。

我会看看你是如何运行你的脚本的,并确保你调用了正确的 Cygwin shell 来运行你的脚本。

于 2012-10-08T11:46:49.750 回答