首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ant执行who -m

从ant执行who -m
EN

Stack Overflow用户
提问于 2014-02-06 11:51:43
回答 3查看 527关注 0票数 1

我试图从Apache执行"who -m"命令,但没有成功。

这是我的蚂蚁脚本:

代码语言:javascript
复制
<?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>

结果为空白。

代码语言:javascript
复制
[echo] I am = 

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

代码语言:javascript
复制
        <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命令,它将显示我要查找的内容:

代码语言:javascript
复制
who -m
gary     pts/8        2014-02-06 12:44 (:0)

知道蚂蚁为什么不接受-m的论点吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-11 06:01:56

最后,我决定走另一条路。

~/..bashrc中,我添加了以下一行:

代码语言:javascript
复制
who -m | awk '{print $5}' > ~/.whoami.out

为了使其具有全球性,我刚刚将其添加到/etc/bashrc中。

这将在每次我登录到远程系统时写入~/.whoami.out文件。

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

代码语言:javascript
复制
<?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>
票数 0
EN

Stack Overflow用户

发布于 2014-02-06 13:41:43

尝试以shell可执行文件的形式执行,以查看它是否有帮助。它有助于使用要运行的确切的unix命令调用shell。

代码语言:javascript
复制
<exec executable="sh" outputproperty="myOutput">
   <arg value="who -m"/>
</exec>
票数 2
EN

Stack Overflow用户

发布于 2014-02-07 02:44:10

您没有提到您有哪种Unix风格,但是在Solaris上,当我尝试您的任务时,我会得到以下错误消息:

代码语言:javascript
复制
[echo] $ Must be attached to terminal for 'am I' option

相反,在OSX上,它似乎是有效的,但它说:

代码语言:javascript
复制
[echo] I am = mjc      tty??    Feb  7 02:35 

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

我怀疑,在您的示例中,由于与Solaris测试相同的原因,它是默默地失败的--即Ant (即java)分叉的shell与您的终端会话没有关联。

(很可能有一个解决办法,但我不知道,如果有,它不太可能是可移植的。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21602172

复制
相关文章

相似问题

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