[英]How can I use ant <exec> to execute commands on linux?
我想使用ant來執行如下命令:
<exec executable="echo ptc@123 | sudo -S /app/Windchill_10.0/Apache/bin/apachectl -k stop">
</exec>
但是它回復了一個錯誤說
'可執行文件和參數周圍的字符不是命令的一部分。
背景是:我想使用ant來停止apache服務器但是我沒有安裝它運行命令的同一個用戶。
有人可以幫忙或給我一些線索嗎?
提前致謝
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 ">
<arg line="-S /app/Windchill_10.0/Apache/bin/apachectl -k stop" />
</exec>
由於sudo -S
需要換行字符才能終止密碼,所以我添加了
在inputstring
的末尾(這是在XML中的屬性值中編碼換行符的最簡單方法)。
請注意, <arg line="..." />
在分詞時非常簡單 - 如果任何命令行參數可以包含空格(例如,如果您需要引用目錄下的文件,例如${user.home}/Library/Application Support
或者如果從您不控制的外部.properties
文件中讀取值,則必須使用具有value
或file
屬性的單獨arg
元素自行拆分參數,例如:
<exec executable="sudo" inputstring="ptc@123 ">
<arg value="-S" />
<arg file="${windchill.install.path}/Apache/bin/apachectl" />
<arg value="-k" />
<arg value="stop" />
</exec>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.