2014-02-06 92 views
1

我正在尝试执行“who -m”来自Apache ant的命令,但未成功。从蚂蚁执行who -m

这里是我的ant脚本:

<?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) 

如果我运行谁从终端-m命令会显示什么,我在寻找:

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

任何想法为什么蚂蚁不接受-m参数?

回答

0

在这一天结束时,我决定去另一路线。

的〜/ .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> 
2

尝试执行作为shell可执行文件来看它有帮助。它有助于用你想运行的精确的unix命令调用shell。

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

没有成功试了一下,决定去的.bashrc路线 – javapenguin

0

你不提你有哪个Unix的味道,但在Solaris上我收到此错误消息时,我尝试你的任务:在OSX

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

相反,它似乎工作,但是他说:

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

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

我怀疑在你的情况下,它是由于与Solaris测试相同的原因而失败 - 即由Ant分支的shell(即由java)不与你的终端会话相关联。

(有可能是一种解决方法,但我没有意识到这一点,如果有一个,它不可能是便携式。)

+0

我是测试它奥姆我的Linux机器。当我在Solaris上运行它时,我也会得到:必须连接到终端以查找'我是'选项。 – javapenguin