Java 如何使用ant<;执行官>;在linux上执行命令?

Java 如何使用ant<;执行官>;在linux上执行命令?,java,linux,ant,Java,Linux,Ant,我想使用ant执行如下命令: <exec executable="echo ptc@123 | sudo -S /app/Windchill_10.0/Apache/bin/apachectl -k stop"> </exec> 但是它回答了一个错误,比如说 可执行文件和参数周围的“字符”不是命令的一部分 背景是:我想使用ant停止apache服务器,但它不是由运行该命令的同一用户安装的 有人能帮我或给我一些线索吗 提前感谢Ant的任务使用Java的进程机制来运行命

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

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

但是它回答了一个错误,比如说

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

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

有人能帮我或给我一些线索吗

提前感谢

Ant的
任务使用Java的
进程
机制来运行命令,这不理解特定于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-S
需要换行符来终止密码,因此我添加了

inputstring
末尾的code>(这是在XML属性值中编码换行符的最简单方法)

请注意,
在分词时非常简单-如果任何命令行参数可能包含空格(例如,如果需要引用目录下的文件,例如
${user.home}/库/应用程序支持
或如果值是从外部的
.properties
文件(您不控制)读取的,则必须使用单独的
arg
元素和
文件
属性将参数拆分,例如:

<exec executable="sudo" inputstring="ptc@123&#10;">
  <arg value="-S" />
  <arg file="${windchill.install.path}/Apache/bin/apachectl" />
  <arg value="-k" />
  <arg value="stop" />
</exec>

有一种技术可以将Jenkins添加到sudoers中,这样您就不必保留根密码
<exec executable="sudo" inputstring="ptc@123&#10;">
  <arg value="-S" />
  <arg file="${windchill.install.path}/Apache/bin/apachectl" />
  <arg value="-k" />
  <arg value="stop" />
</exec>