我正在尝试从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参数?
答案 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>