首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据变量的值将参数传递给apache-ant exec任务

根据变量的值将参数传递给apache-ant exec任务
EN

Stack Overflow用户
提问于 2012-08-07 06:17:45
回答 2查看 11.3K关注 0票数 11

我只使用apache-ant,而不是 ant-contrib

我有一个ant目标

代码语言:javascript
复制
<target name="stop" depends="init" >
...
</target>

其中我想调用exec任务。

如果变量HOST_NAME的值为all

代码语言:javascript
复制
<exec executable="${executeSSH.shell}" >
    <arg value="-h ${HOST_NAME}" />
    <arg value="-i ${INSTANCE}" />
    <arg value="-w 10" />
    <arg value="-e ${myOperation.shell} " />
    <arg value=" -- " />
    <arg value="${INSTANCE} ${USERNAME} ${PASSWORD}" />
</exec>

如果变量HOST_NAME的值为anything else

代码语言:javascript
复制
<exec executable="${executeSSH.shell}">
    <arg value="-h ${HOST_NAME}" />
    <arg value="-i ${INSTANCE}" />
    <arg value="-e ${myOperation.shell} " />
    <arg value=" -- " />
    <arg value="${INSTANCE} ${USERNAME} ${PASSWORD}" />
</exec>

,但是我只想写一个任务,而不是重复exec。我使用了HOST_NAME参数,但是如何处理第二个参数-w 10,这两个调用都不同。

通过使用conditionif else进行搜索,我尝试了几种方法,但似乎没有什么适用于execarg

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-07 11:33:45

试着使用宏。以下示例未进行测试。

代码语言:javascript
复制
<macrodef name="callSSH">
    <element name="extArgs" optional="y"/>
    <sequential>
        <exec executable="${executeSSH.shell}" >
            <arg value="-h ${HOST_NAME}" />
            <arg value="-i ${INSTANCE}" />
            <extArgs/>
            <arg value="-e ${myOperation.shell} " />
            <arg value=" -- " />
            <arg value="${INSTANCE} ${USERNAME} ${PASSWORD}" />
        </exec>
    </sequential>
</macrodef> 
<target name="stop" depends="init" >
    <if>
       <equals arg1="${HOST_NAME}" arg2="all"/>
        <then>
            <callSSH>
                <extArgs>
                    <arg value="-w 10" />
                </extArgs>
            </callSSH>
        </then>
        <else>
            <callSSH>
                <extArgs/>
            </callSSH>
        </else>
    </if>
</target>

或者你不使用肋骨:

代码语言:javascript
复制
<target name="sshExecWithHost" if="HOST_NAME"> 
    <callSSH>
        <extArgs>
            <arg value="-w 10" />
        </extArgs>
    </callSSH>
</target>

<target name="sshExecNoHost" unless="HOST_NAME">
    <callSSH/>
</target>

<target name="sshSwitch" depends="sshExecNoHost,sshExecWithHost">
</target>

<target name="stop" depends="init,sshSwitch" >
</target>
票数 6
EN

Stack Overflow用户

发布于 2013-11-22 09:19:56

您可以使用条件任务:

代码语言:javascript
复制
<condition property="my.optional.arg" value="-w 10" else="">
    <equals arg1="${HOST_NAME}" arg2="all" />
</condition>

<exec executable="${executeSSH.shell}" >
    <arg value="-h ${HOST_NAME}" />
    <arg value="-i ${INSTANCE}" />
    <arg line="${my.optional.arg}" />
    <arg value="-e ${myOperation.shell} " />
    <arg value=" -- " />
    <arg value="${INSTANCE} ${USERNAME} ${PASSWORD}" />
</exec>
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11840284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档