Ant EXEC无法运行bash脚本

时间:2010-11-15 21:17:29

标签: ant exec

我正在尝试使用ant来运行bash脚本。

我发现exec指令是作业的工具

我创建了一个bash脚本test.sh 在我的蚂蚁目标中,我补充说:

<project basedir=".">
    <property name="temp.deployment.dir" value="temp_deployment_dir"/>
    <property name="temp.dir" value="temp_upload_dir"/>
    <property name="src.dir" value="www"/>
    <property name="js.dir" value="${src.dir}/public/js"/>
    <property name="css.dir" value="${src.dir}/public/css"/>
    <property name="img.dir" value="${src.dir}/public/images/"/>
    <target name="clean">
            <delete dir="${temp.dir}"/>
    </target>
    <target name="update-statics">
            <mkdir dir="${temp.dir}"/>
            <!--TODO: add statics in -->
    </target>
    <target name="deploy">
            <mkdir dir="${$temp.deployment.dir}"/>
            <copy todir="${temp.deployment.dir}">
                    <fileset dir="${src.dir}"/>
            </copy>
            <exec executable="bash" newenvironment="false" dir=".">
                <arg value="cmd_update.sh"/>
            </exec>
     </target>
</project>

当我运行它时,我的构建成功,但test.sh永远不会运行。

我用谷歌搜索并搜索了我可能做错的事情,但因为没有错误我无法调试它。有没有人知道exec指令的正确用法,或者有什么我明显做错了。从我所知道的,我所做的与以往我发现的exec的其他例子一样。

3 个答案:

答案 0 :(得分:4)

如果Bash脚本中有shebang,并且您的脚本是可执行的,则不需要包含bash作为命令。 (我当然是假设Linux,Unix或Mac)。

<exec executable="${path.to.command}/cmd_update.sh"
    failonerror="true"
    osfamily="unix"/>

始终将failonerror设置为true并始终设置osfamily

您可能需要设置其他内容,例如存储 STDOUT STDERR 的属性。您还可以通过<arg value>子任务传递参数。

我不会使用searchpath参数,因为这可能是一个安全漏洞。

答案 1 :(得分:1)

首先要做的事情 - 当我看到一个高管时,我常常畏缩,这通常是有点臭的。 您希望在使用exec时将failonerror设置为“true”,并确保您的脚本在适当的情况下使用正确的返回代码退出。

你也不需要调用bash,你可以直接调用脚本 - 确保它是可执行的。

ant -v的输出是相关的。

答案 2 :(得分:1)

尝试:

<exec executable="**/bin/**bash" newenvironment="false" dir=".">  
    <arg value="cmd_update.sh"/>             
</exec>