如何使用 Bash 中的 exit(0) 超时

How to timeout with exit(0) from Bash

我正在尝试设置一个 travis 脚本,我们 运行 我们的应用程序可以确保它正常启动。如果是这样,那么我们就可以通过构建。测试在启动时捕获错误。但是,它是一个 api 服务器,如果我 运行 二进制文件成功,它将无限期地 运行。

我尝试使用以下方法:

timeout --preserve-status 20s <binary>

但这只是 returns 二进制文件的退出代码,当超时被杀死时为 143。

timeout 20s <binary>

这个returns成功时退出127。

有没有我可以使用的脚本运行如果二进制文件在启动时出现错误并且如果成功启动说 20 秒后以 0 退出以通过 travis 构建,则二进制文件失败?

无需使用 sleep 您可以通过以下方式更改命令以在 0:

强制执行 return 代码
(timeout 20s <binary>; exit 0) 

示例:

(timeout 2s '/bin/sleep' 100; exit 0) #subshell creation                                                                                        
echo $?
0

timeout 2s '/bin/sleep' 100
echo $?
124

如果您想:

  • Return 退出代码 0:

    • 如果命令成功完成(代码 0)。
    • 或者如果命令尚未完成(代码 124),但也没关系。
  • Return 退出代码 1:

    • 如果命令在超时之前失败。

然后试试这个:

timeout 10m some_command || ( [[ $? -eq 124 ]] && \
echo "WARNING: Timeout reached, but that's OK" )