1

cygwin がインストールされている Windows マシンで、ANT build.xml からシェル スクリプトを呼び出しています。スクリプトが呼び出され、最初のエコー ステートメントがスクリプトで実行されています。しかし、スクリプト内の「sed」や「find」などのステートメントでエラーがスローされます。スクリプトを cygwin で直接実行すると、正常に実行されます。ANT から呼び出すと、エラーが発生してビルドに失敗します。以下のように、build.xml からシェル スクリプトを呼び出しています。

    <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>

シェル スクリプトのスニペットは次のとおりです。

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

問題を理解するのを手伝ってもらえますか?

4

2 に答える 2

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

一般に、ant からプラットフォーム固有のスクリプトを呼び出すことは避けてください。Java タスクまたはプログラムの作成は、はるかに簡単です。

于 2012-10-09T07:49:18.027 に答える
0

CygwinではなくWindowsシェルでスクリプトを実行していると思います。この場合、Windowsに付属のFINDを呼び出して、報告している正確なエラーを取得します。

スクリプトをどのように実行しているかを調べ、スクリプトを実行するために適切なCygwinシェルを呼び出していることを確認します。

于 2012-10-08T11:46:49.750 に答える