bash超时退出0,失败退出非0
bash exit 0 on timeout, exit non-0 on failure
我想 运行 使用 timeout
命令的脚本,如果脚本 运行 没有问题或发生超时,则退出 0
。否则,如果脚本以一些 non-0
代码退出,我想保留它。
我想象中的语法是 timeout
实现类似 --exit
的东西,所以我可以写 timeout --exit 0 10s ping google.com
.
我看过 ,它说您可以使用 or
条件处理 timeout
的退出代码,例如 timeout 10s ping google.com || [[ $? -eq 143 ]]
。但这是对 timeout
的结果进行硬编码,如果我的脚本失败并抛出 143
,它将静默失败。我也不想强制退出0。如果脚本失败我想知道。
我正在寻找一个保留脚本中所有失败(和非失败)但总是从 timeout
退出 0 的答案。如果有不使用 timeout
且认知复杂度较低的解决方法,我也会考虑。
运行 timeout
命令,并将其退出代码保存到变量中。将其与命令超时时的代码 124 进行比较。如果代码是 124,我们将以 0 退出以将失败的退出代码转换为成功。如果退出代码不是 124,我们有原始命令的状态,因为 timeout
在命令 运行 完成时退出。
timeout 10s COMMAND
status="$?"
if (( status == 124 )); then
# Command timed out
exit 0
fi
# Command either succeeded or failed
exit "$status"
一个问题是原始命令以 124 退出,因为 timeout
也会传播该退出代码。对于这段代码,它看起来像是命令超时,所以当它应该以非零退出时它会以 0 退出,因为原始命令失败。没有(简单的)方法来区分这两种情况。
我想 运行 使用 timeout
命令的脚本,如果脚本 运行 没有问题或发生超时,则退出 0
。否则,如果脚本以一些 non-0
代码退出,我想保留它。
我想象中的语法是 timeout
实现类似 --exit
的东西,所以我可以写 timeout --exit 0 10s ping google.com
.
我看过 or
条件处理 timeout
的退出代码,例如 timeout 10s ping google.com || [[ $? -eq 143 ]]
。但这是对 timeout
的结果进行硬编码,如果我的脚本失败并抛出 143
,它将静默失败。我也不想强制退出0。如果脚本失败我想知道。
我正在寻找一个保留脚本中所有失败(和非失败)但总是从 timeout
退出 0 的答案。如果有不使用 timeout
且认知复杂度较低的解决方法,我也会考虑。
运行 timeout
命令,并将其退出代码保存到变量中。将其与命令超时时的代码 124 进行比较。如果代码是 124,我们将以 0 退出以将失败的退出代码转换为成功。如果退出代码不是 124,我们有原始命令的状态,因为 timeout
在命令 运行 完成时退出。
timeout 10s COMMAND
status="$?"
if (( status == 124 )); then
# Command timed out
exit 0
fi
# Command either succeeded or failed
exit "$status"
一个问题是原始命令以 124 退出,因为 timeout
也会传播该退出代码。对于这段代码,它看起来像是命令超时,所以当它应该以非零退出时它会以 0 退出,因为原始命令失败。没有(简单的)方法来区分这两种情况。