我想使用ant来执行如下命令:
<exec executable="echo ptc@123 | sudo -S /app/Windchill_10.0/Apache/bin/apachectl -k stop">
</exec>
Run Code Online (Sandbox Code Playgroud)
但是它回复了一个错误说
'可执行文件和参数周围的字符不是命令的一部分.
背景是:我想使用ant来停止apache服务器但是我没有安装它运行命令的同一个用户.
有人可以帮忙或给我一些线索吗?
提前致谢
Ian*_*rts 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>
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,没有必要,因为您可以只运行sudo命令并使用它inputstring来提供输入而不是使用管道echo:
<exec executable="sudo" inputstring="ptc@123 ">
<arg line="-S /app/Windchill_10.0/Apache/bin/apachectl -k stop" />
</exec>
Run Code Online (Sandbox Code Playgroud)
因为sudo -S需要换行符来终止密码,所以我 在最后添加了inputstring(这是在XML中用属性值编码换行符的最简单方法).
请注意,<arg line="..." />在分词时非常简单 - 如果任何命令行参数可以包含空格(例如,如果您需要引用目录下的文件,${user.home}/Library/Application Support或者如果从外部.properties文件中读取值,则你不能控制)然后你必须使用arg带有value或file属性的单独元素自己拆分参数,例如:
<exec executable="sudo" inputstring="ptc@123 ">
<arg value="-S" />
<arg file="${windchill.install.path}/Apache/bin/apachectl" />
<arg value="-k" />
<arg value="stop" />
</exec>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29695 次 |
| 最近记录: |