0

私はBASHスクリプトに触れたことがありません。これは、私が学びたいことです。ant debugAndroidビルドでの出力に基づいて条件ステートメントを実行する方法がわかりません。

私は本質的に次のようなことを言いたいです

if(`ant debug` == SUCCESS) {
  // EXECUTE THESE COMMANDS
} else {
  // EXECUTE THESE COMMANDS
}

ant debugがシェルスクリプトで成功したか失敗したかをどのように判断できますか?

解決

さて、ここに私が持っているものがあります:

ant clean

if ant debug; then
    echo "success"
else
    echo "failure"
fi
4

3 に答える 3

1

簡単な要約をお伝えします。

Bashでは、条件はプログラムの終了コードに基づいています。の終了コードは0trueとして受け入れられ、他のすべてはfalseとして受け入れられます。

たとえば、trueプログラムは常に終了コードがで終了します0。これは、次のようなことが可能であることを意味します。

if true;
  echo "It is true"
fi

ほとんどのコマンドはこのシステムを尊重しますが、すべてのプログラムが尊重するわけではありません。最初に確認することは、成功と失敗の際に終了コードantが返すものです。前のコマンドの終了コードは。で確認できます$?

次に例を示します。

$ true
$ echo $?
0
$ false
$ echo $?
1

antが終了コードシステムを適切に尊重する場合は、次のようなことが可能です。

if ant debug; then
  echo success
else
  echo failure
fi
于 2012-12-07T18:46:48.040 に答える
0

Antのデバッグについては何も知りませんが、Bashでやりたいことを行うには2つのアプローチがあります。1つ目は、次のように出力をテストすることです。

if test $(ant debug) == 'SUCCESS'; then
    # do stuff
else
    # do other stuff
fi

$(.....)質問で書いたようにバックティックを使用することで、シェルスクリプトをBourneシェルの他のバリアントに移植できるようにすることができますが、コマンドに後でネストされた引用符が含まれる場合、それは面倒になり始めます。

もう少し堅牢な2番目の方法は、コマンドの出力ではなく、コマンドの終了値をテストすることです。これは、文書化されて安定している終了コードを持つAnt(またはその他)に依存しますが、コマンドの出力が変更されても、スクリプトは引き続き機能することを意味します。たとえば、POSIX標準では、プログラムが想定どおりの処理に成功した場合、値をゼロにしてexit()を実行する必要があるとされています。

ant debug > /dev/null
ant_exit_code=$?
# other commands can safely go here now that $? is captured

if test $ant_exit_code -eq 0; then
    # do stuff
else
    # do other stuff
fi

そして、はい、Bourneシェルは実際には「fi」でifブロックを終了します。:-)

于 2012-12-07T18:52:17.123 に答える
0

デバッグタスクでAntを呼び出すクイックman antショー。Antのタスクは一種のユーザー定義のXMLスクリプトであり、デフォルトではAntは現在のディレクトリ内のファイルを検索します。androidツールを使用してファイルを生成できますが、テンプレートは保持され、オンラインで表示できます(1005行目でターゲットが定義されています)。ant debugbuild.xmlandroid-sdk/tools/antdebug

したがって、これant debugは実際にはコマンドではなく、スクリプトツールチェーンに配置するべきではありません。ただし、出力が安定していて勇気があると感じた場合は、いつでも文字列を比較できます。これは明確なガイドです。

if [ `ant debug` = $SOMETHING ]; then
  echo Success
else
  echo Failure
fi
于 2012-12-07T19:07:22.447 に答える