在Linux shell脚本中,如果达到某个时间限制,我想使用 timeout 命令结束另一个命令。一般来说:
timeout -s SIGTERM 100 command
但是我也希望在命令因某些原因失败时退出我的shell脚本。如果命令提前失败,则不会达到时间限制,超时将以退出代码0退出。因此,陷阱或设置-e ,至少我已经尝试过它并没有奏效。我怎样才能达到我想做的目的?
答案 0 :(得分:3)
您的情况不是很清楚,因为您没有在帖子中包含您的代码。
如果 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)
来自man timeout
:
如果命令超时,并且未设置--preserve-status,则 以状态124退出。否则,退出状态为COMMAND。如果 没有指定信号,超时时发送TERM信号。术语 信号可以杀死任何不阻止或捕获该信号的进程。 由于此信号,可能需要使用KILL(9)信号 无法捕获,在这种情况下退出状态是128 + 9而不是 124。
请参阅BashFAQ105以了解set -e
的陷阱。