簡體   English   中英

我怎么能用螞蟻 <exec> 在linux上執行命令?

[英]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&#10;">
  <arg line="-S /app/Windchill_10.0/Apache/bin/apachectl -k stop" />
</exec>

由於sudo -S需要換行字符才能終止密碼,所以我添加了&#10; inputstring的末尾(這是在XML中的屬性值中編碼換行符的最簡單方法)。

請注意, <arg line="..." />在分詞時非常簡單 - 如果任何命令行參數可以包含空格(例如,如果您需要引用目錄下的文件,例如${user.home}/Library/Application Support或者如果從您不控制的外部.properties文件中讀取值,則必須使用具有valuefile屬性的單獨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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM