我试图从Apache执行"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)知道蚂蚁为什么不接受-m的论点吗?
发布于 2014-02-11 06:01:56
最后,我决定走另一条路。
在~/..bashrc中,我添加了以下一行:
who -m | awk '{print $5}' > ~/.whoami.out为了使其具有全球性,我刚刚将其添加到/etc/bashrc中。
这将在每次我登录到远程系统时写入~/.whoami.out文件。
在我的ant脚本中,我读取了这个文件的内容:
<?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>发布于 2014-02-06 13:41:43
尝试以shell可执行文件的形式执行,以查看它是否有帮助。它有助于使用要运行的确切的unix命令调用shell。
<exec executable="sh" outputproperty="myOutput">
<arg value="who -m"/>
</exec>发布于 2014-02-07 02:44:10
您没有提到您有哪种Unix风格,但是在Solaris上,当我尝试您的任务时,我会得到以下错误消息:
[echo] $ Must be attached to terminal for 'am I' option相反,在OSX上,它似乎是有效的,但它说:
[echo] I am = mjc tty?? Feb 7 02:35 注意,?? -它也没有找到会话的终端。
我怀疑,在您的示例中,由于与Solaris测试相同的原因,它是默默地失败的--即Ant (即java)分叉的shell与您的终端会话没有关联。
(很可能有一个解决办法,但我不知道,如果有,它不太可能是可移植的。)
https://stackoverflow.com/questions/21602172
复制相似问题