如何使用ant< exec>在Linux上执行命令? [英] How can I use ant <exec> to execute commands on linux?

查看:40
本文介绍了如何使用ant< exec>在Linux上执行命令?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I would like to use ant to exectue a command like below:

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

但是它回答了一个错误

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

The ' characters around the executable and arguments are not part of the command.

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

The background is: I want to use ant to stop the apache server but it doesn't installed by the same user I run the command.

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

Anyone could help or give me some clues?

预先感谢

推荐答案

Ant的< exec> 任务使用Java的 Process 机制来运行命令,这并不理解特定于Shell的语法,例如管道和重定向.如果您需要使用管道,则必须通过说类似

Ant's <exec> task uses Java's Process mechanism to run commands, and this does not understand shell-specific syntax like pipes and redirections. If you need to use pipes then you have to run a shell explicitly by saying something like

<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 :

but in this case it's not necessary, as you can run just the sudo command and use inputstring to provide its input rather than using a piped echo:

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

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

Since sudo -S requires a newline character to terminate the password, I've added &#10; on the end of the inputstring (this is the simplest way to encode a newline character in an attribute value in XML).

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

Note that <arg line="..." /> is pretty simple minded when it comes to word splitting - if any of the command line arguments could contain spaces (for example if you need to refer to a file under a directory such as ${user.home}/Library/Application Support or if the value is read from an external .properties file that you don't control) then you must split the arguments up yourself using separate arg elements with value or file attributes, e.g.:

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

这篇关于如何使用ant&lt; exec&gt;在Linux上执行命令?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆