我想使用ant来执行如下命令:
<exec executable="echo ptc@123 | sudo -S /app/Windchill_10.0/Apache/bin/apachectl -k stop">
</exec>
但它回复了一个错误说
可执行文件和参数周围的'字符不是命令的一部分。
背景是:我想使用ant来停止apache服务器,但是我没有运行该命令的同一用户安装。
任何人都可以帮忙或给我一些线索?
提前致谢
答案 0 :(得分:22)
Ant的<exec>
任务使用Java的Process
机制来运行命令,而这并不了解特定于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 ">
<arg line="-S /app/Windchill_10.0/Apache/bin/apachectl -k stop" />
</exec>
由于sudo -S
需要换行符来终止密码,我在
的末尾添加了inputstring
(这是编码换行符的最简单方法) XML中的属性值。)
请注意<arg line="..." />
在分词时非常简单 - 如果任何命令行参数可以包含空格(例如,如果需要引用{{1}等目录下的文件或者,如果从您无法控制的外部${user.home}/Library/Application Support
文件中读取该值,则必须使用.properties
或{{1}的单独arg
元素自行拆分参数属性,例如:
value