如何在shell脚本中捕获Gradle退出代码?

时间:2017-02-28 16:47:15

标签: bash shell gradle exit-code

我想捕获Gradle任务的返回代码。这是一个执行任务的小型bash脚本草稿

#!/bin/bash

gradlew_return_code=`./gradlew assembleDebug`
echo ">>> $gradlew_return_code"
if [ "$gradlew_return_code" -eq "0" ]; then
    echo "Gradle task succeeded."
else
    echo "Gradle task failed."
fi

脚本存储返回值,而是存储Gradle任务的整个控制台输出。

请注意,示例脚本是一个更复杂的脚本的简化,我需要捕获返回值。

1 个答案:

答案 0 :(得分:10)

退出状态位于$?。命令替换捕获输出

./gradlew assembleDebug; gradlew_return_code=$?

...或者,如果您需要与set -e(我strongly advise against using)的兼容性:

gradlew_return_code=0
./gradlew assembleDebug || gradlew_return_code=$?

......或者,如果您需要捕获两者:

gradlew_output=$(./gradlew assembleDebug); gradlew_return_code=$?
if (( gradlew_return_code != 0 )); then
  echo "Grade failed with exit status $gradlew_return_code" >&2
  echo "and output: $gradlew_output" >&2
fi

请注意,我建议将捕获放在与调用相同的行上 - 这样可以避免修改,例如在捕获之前添加调试命令以修改返回代码。

但是,您根本不需要捕获它:shell中的if语句对它们所包含的命令的退出状态进行操作,因此不是进行检查捕获的退出状态的测试操作,而是可以将命令本身放在if

的COMMAND部分
if ./gradlew assembleDebug; then
  echo "Gradle task succeeded" >&2
else
  echo "Gradle task failed" >&2
fi