如何在 shell 脚本中捕获 Gradle 退出代码?
How to capture the Gradle exit code in a shell script?
我想捕获 Gradle 任务的 return 代码。这是一个小的 bash 脚本 draft 执行任务:
#!/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
该脚本 不 存储 return 值,而是 Gradle 任务的整个控制台输出。
请注意,示例脚本是对我需要捕获 return 值的更复杂脚本的简化。
退出状态在 $?
。命令替换捕获 output.
./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
请注意,我确实建议将捕获与调用放在同一行——这样可以避免修改,例如添加的调试命令在捕获之前修改 return 代码。
但是,您根本不需要在此处捕获它:shell 中的 if
语句对它们所包含的命令的退出状态进行操作,因此无需进行测试操作检查捕获的退出状态,您可以将命令本身放在 if
:
的 COMMAND 部分
if ./gradlew assembleDebug; then
echo "Gradle task succeeded" >&2
else
echo "Gradle task failed" >&2
fi
我想捕获 Gradle 任务的 return 代码。这是一个小的 bash 脚本 draft 执行任务:
#!/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
该脚本 不 存储 return 值,而是 Gradle 任务的整个控制台输出。
请注意,示例脚本是对我需要捕获 return 值的更复杂脚本的简化。
退出状态在 $?
。命令替换捕获 output.
./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
请注意,我确实建议将捕获与调用放在同一行——这样可以避免修改,例如添加的调试命令在捕获之前修改 return 代码。
但是,您根本不需要在此处捕获它:shell 中的 if
语句对它们所包含的命令的退出状态进行操作,因此无需进行测试操作检查捕获的退出状态,您可以将命令本身放在 if
:
if ./gradlew assembleDebug; then
echo "Gradle task succeeded" >&2
else
echo "Gradle task failed" >&2
fi