超时函数返回值

Zer*_*ero 11 linux bash shell-script timeout

我在 debian 上使用超时功能来等待 5 秒的脚本。效果很好,但我遇到的问题是我需要一个返回值。像 1 表示超时和 0 表示没有超时我该怎么做?

看看我的代码:

timeout 5 /some/local/script/connect_script -x 'status' > output.txt
# here i need the return of timeout
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我的 connect_script -x 'status' 将状态作为字符串返回并将其打印到屏幕上(可能您看不到这个) 此问题的背景是,如果服务器(对于 connect_script)被冻结,脚本将不执行任何操作. 这就是为什么我需要超时。当它超时时,我想重新启动服务器。我可以这样做,但我不知道如何查看它是否超时...

Ste*_*itt 22

如果timeout超时,则以状态 124退出;您可以检查它以确定脚本是否超时。


Chr*_*her 7

根据手册man timeout):

概要超时 [OPTION] NUMBER[SUFFIX] 命令 [ARG]...

[...] 如果命令超时,则以状态 124 退出。否则以 COMMAND 状态退出

将此与退出状态或返回值存储在变量 中的知识相结合$?,我们有...

timeout 5 /some/local/script/connect_script -x 'status' > output.txt
RETVAL=$?
Run Code Online (Sandbox Code Playgroud)

然后,您可以根据 的值进行更多处理$RETVAL,如果超时则为 124,或者基于 的退出状态的其他值connect_script