2012-10-08 99 views
1

我在安裝了cygwin的Windows機器上從ANT build.xml調用shell腳本。該腳本正在調用,並且腳本中正在執行初始回聲語句。但它會在腳本中的'sed'或'find'等語句中引發錯誤。當我直接在cygwin中執行腳本時,它已成功執行。在從ANT調用它時,會出現錯誤並且構建失敗。我打電話從build.xml中的shell腳本如下:當通過ANT調用shell命令時無法識別

<target name="xml2prop" 
    description="exec shell script" 
     > 
    <exec dir="." executable="C:\cygwin\bin\bash" osfamily="windows">  
     <arg value="C:\script\testscript.sh"/> 
     <arg value="${root}"/> 
    </exec> 
</target> 

shell腳本片段是如下:

if [ $# -lt 1 ] 
then 
echo "error" 
else 
echo "\$1 is \"$1\" and total args to $0 are $# " 
rt="${1//\\//}" 
echo $rt 
fi; 
find "$rt" -name "*.xml" | 
while read xmlfile 
do 
echo "$xmlfile"; 
done 

,我得到的錯誤是如下

[exec] $1 is "C:\new\test" and total args to C:\script\testscript.sh are 1 
[exec] C:/new/test 
[exec] FIND: Parameter format not correct 

你能幫我弄清楚這個問題嗎?

+1

爲什麼不作爲字符串來回應find命令並查看傳遞給它的內容。 –

+0

某些舊版本的'find'沒有默認'-print',你可以試試。如果沒有,請在腳本的開頭放置'set -x'來查看生成的值。 – cdarke

回答

0

我認爲你在Windows Shell中運行的腳本不在Cygwin中。在這種情況下,您將調用Windows附帶的FIND並獲取您報告的確切錯誤。

我會看你如何運行你的腳本,並確保你正在調用合適的Cygwin shell來運行你的腳本。

+0

可以請你幫我弄清楚,如果以下是從Windows機器上的build.xml調用cygwin shell來運行shell腳本的正確方法嗎?

+0

'重新調用它是正確的。然而,正如Jayan指出的那樣,您需要確保您的PATH具有Cygwin工具,或者您在腳本中使用絕對路徑。 – AlG

1

你的路徑是什麼樣的?它看起來像腳本實際上運行Windows find.exe。在可能是使用絕對路徑調用命令

FIND_CMD=/bin/find 
ANOTHER_COMMAND=/usr/bin/find 
//assert find command exists 
if [ ! -x $FIND_CMD ] 
     echo "not found command " 
     exit 1; 
fi 

if [ $# -lt 1 ] 
then 
echo "error" 
else 
echo "\$1 is \"$1\" and total args to $0 are $# " 
rt="${1//\\//}" 
echo $rt 
fi; 
$FIND_CMD "$rt" -name "*.xml" | 
while read xmlfile 
do 
echo "$xmlfile"; 
done 

一般避免調用從螞蟻平臺特定的腳本好主意。編寫一個java任務或一個程序要容易得多。

+0

感謝Jayan ..我的大多數命令都使用它在我的shell腳本中使用「jar」命令正在執行中創建一個問題。我應該爲此做些什麼? –