在Linux shell脚本中,如果达到一定的时间限制,我想使用timeout命令来结束另一个命令。 一般来说:
timeout -s SIGTERM 100 command
但是我也想让我的shell脚本因命令失败而退出。 如果命令失败的时间足够早,则不会达到时间限制,并且超时将退出,退出代码为0.因此,错误不能被trap或set -e所限制 ,至less我已经尝试过了,它不起作用。 我怎样才能达到我想要做的?
你的情况不是很清楚,因为你没有在邮件中包含你的代码。
如果在超时值之前完成,超时将退出并显示命令的退出代码。
例如:
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)
从man timeout
:
如果命令超时,并且–preserve-status未设置,则退出状态124.否则,退出状态为COMMAND。 如果没有指定信号,则在超时后发送TERM信号。 TERM信号杀死任何不阻塞或捕获该信号的进程。 可能需要使用KILL(9)信号,因为这个信号不能被捕获,在这种情况下退出状态是128 + 9而不是124。
请参阅BashFAQ105以了解set -e
的缺陷。