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

Posted

技术标签:

【中文标题】如何在 shell 脚本中捕获 Gradle 退出代码?【英文标题】:How to capture the Gradle exit code in a shell script? 【发布时间】:2017-02-28 16:47:15 【问题描述】:

我想捕获 Gradle 任务的返回码。这是一个执行任务的小 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

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


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

【问题讨论】:

另见***.com/questions/20157938/… 【参考方案1】:

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

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

【讨论】:

以上是关于如何在 shell 脚本中捕获 Gradle 退出代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Perl 中捕获输出和退出代码时执行外部脚本?

如何在 Shell 脚本的变量中捕获 telnet 命令的输出

每天三分钟搞定linux shell脚本24 后台模式运行

如何在 Shell 脚本中建立远程连接时捕获错误

如何从 C# 中的 powershell 脚本中捕获退出代码

如何从 shell 脚本中捕获 Spark 错误