Jad*_*zia 7 linux bash shell timeout
在 Linux shell 脚本中,如果达到某个时间限制,我想使用timeout命令来结束另一个命令。一般来说:
timeout -s SIGTERM 100 command
Run Code Online (Sandbox Code Playgroud)
但我也希望我的 shell 脚本在命令由于某种原因失败时退出。如果命令失败得足够早,则不会达到时间限制,超时将以退出代码 0 退出。因此无法使用trap或set -e捕获错误,至少我已经尝试过了,但它不起作用。我怎样才能实现我想做的事?
你的情况不是很清楚,因为你没有在帖子中包含你的代码。
timeout 如果它在超时值之前完成,则使用命令的退出代码退出。
例如:
timeout 5 ls -l non_existent_file
# outputs ERROR: ls: cannot access non_existent_file: No such file or directory
echo $?
# outputs 2 (which is the exit code of ls)
Run Code Online (Sandbox Code Playgroud)
来自man timeout:
如果命令超时,并且未设置 --preserve-status,则以状态 124 退出。否则,以 COMMAND 状态退出。如果未指定信号,则在超时时发送 TERM 信号。TERM 信号会杀死任何不阻塞或捕获该信号的进程。可能需要使用 KILL (9) 信号,因为无法捕捉到该信号,在这种情况下,退出状态为 128+9 而不是 124。
请参阅BashFAQ105以了解set -e.
| 归档时间: |
|
| 查看次数: |
17436 次 |
| 最近记录: |