执行who -m from ant

时间:2014-02-06 11:51:44

标签: ant exec

我正在尝试从Apache ant执行“who -m”命令而没有成功。

这是我的蚂蚁脚本:

<?xml version="1.0" encoding="UTF-8"?>
<project name="default" default="who.am.i">
    <target name="who.am.i">
        <exec executable="who" outputproperty="myOutput">
            <arg value="-m"/>
        </exec>
        <echo message="I am = ${myOutput}"/>
    </target>
</project>

结果为空白。

[echo] I am = 

如果我在没有参数的情况下运行exec,它会显示正确的结果:

        <exec executable="who" outputproperty="myOutput">
        </exec>

[echo] host.name = gary     tty8         2014-02-03 12:04 (:0)
[echo] gary     pts/0        2014-02-03 12:09 (:0)
[echo] gary     pts/1        2014-02-03 12:23 (:0)
[echo] gary     pts/2        2014-02-04 11:36 (:0)
[echo] gary     pts/4        2014-02-05 13:27 (:0)
[echo] gary     pts/7        2014-02-04 12:23 (:0)
[echo] gary     pts/8        2014-02-06 12:44 (:0)

如果我从终端运行who -m命令,它会显示我要查找的内容:

who -m
gary     pts/8        2014-02-06 12:44 (:0)

为什么ant不接受-m参数?

3 个答案:

答案 0 :(得分:2)

尝试执行shell可执行文件以查看它有帮助。它有助于使用您想要运行的精确unix命令来调用shell。

<exec executable="sh" outputproperty="myOutput">
   <arg value="who -m"/>
</exec>

答案 1 :(得分:0)

您没有提到您拥有的Unix风格,但在Solaris上,我在尝试您的任务时收到此错误消息:

[echo] $ Must be attached to terminal for 'am I' option

相比之下,在OSX上,出现可以工作,但是说:

[echo] I am = mjc      tty??    Feb  7 02:35 

注意?? - 它也没有找到会话的终端。

我怀疑在你的情况下它出于与Solaris测试相同的原因而无声地失败 - 即由Ant分叉的shell(即java)与你的终端会话无关。

(可能有一种解决方法,但我不知道它,如果有的话,它不太可能是便携式的。)

答案 2 :(得分:0)

在一天结束时,我决定走另一条路。

〜/ .bashrc 中添加了以下行:

who -m | awk '{print $5}' > ~/.whoami.out

为了使其全球化我只是将其添加到 / etc / bashrc

每次登录远程系统时都会写入〜/ .whoami.out文件。

在我的蚂蚁脚本中,我读了这个文件的内容:

<?xml version="1.0" encoding="UTF-8"?>
<project name="default" default="default">

    <target name="test.who.key">
        <loadfile property="who.key" srcFile="${user.home}/.whoami.out" failonerror="false"/>
        <condition property="who.cond">
            <isset property="who.key"/>
        </condition>
        <condition property="who.cond2">
            <not>
                <isset property="who.key"/>
            </not>
        </condition>
    </target>

    <target name="init.who.key" depends="test.who.key" if="who.cond">
        <echo message="WHO EXIST"/>
        <property name="whoAmI" value="${who.key}"/>
    </target>

    <target name="init.not.who.key" depends="test.who.key" if="who.cond2">
        <echo message="WHO DOES NOT EXIST"/>
        <property name="whoAmI" value=""/>
    </target>    

    <target name="default" depends="init.who.key, init.not.who.key">
        <echo message="whoAmI = ${whoAmI}"/>
    </target>

</project>