如何使用ant <exec>在linux上执行命令?</exec>

时间:2014-01-02 12:39:57

标签: java linux ant

我想使用ant来执行如下命令:

<exec executable="echo ptc@123 | sudo -S /app/Windchill_10.0/Apache/bin/apachectl -k stop">
</exec>

但它回复了一个错误说

可执行文件和参数周围的'字符不是命令的一部分。

背景是:我想使用ant来停止apache服务器,但是我没有运行该命令的同一用户安装。

任何人都可以帮忙或给我一些线索?

提前致谢

1 个答案:

答案 0 :(得分:22)

Ant的<exec>任务使用Java的Process机制来运行命令,而这并不了解特定于shell的语法,如管道和重定向。如果您需要来使用管道,那么您必须通过说出类似

的内容来明确地运行shell
<exec executable="/bin/sh">
  <arg value="-c" />
  <arg value="echo ptc@123 | sudo -S /app/Windchill_10.0/Apache/bin/apachectl -k stop" />
</exec>

但在这种情况下没有必要,因为您只需运行sudo命令并使用inputstring来提供输入,而不是使用管道echo

<exec executable="sudo" inputstring="ptc@123&#10;">
  <arg line="-S /app/Windchill_10.0/Apache/bin/apachectl -k stop" />
</exec>

由于sudo -S需要换行符来终止密码,我在&#10;的末尾添加了inputstring(这是编码换行符的最简单方法) XML中的属性值。)

请注意<arg line="..." />在分词时非常简单 - 如果任何命令行参数可以包含空格(例如,如果需要引用{{1}等目录下的文件或者,如果从您无法控制的外部${user.home}/Library/Application Support文件中读取该值,则必须使用.properties或{{1}的单独arg元素自行拆分参数属性,例如:

value