Linux超时命令和退出代码

时间:2017-03-05 23:36:33

标签: linux bash shell timeout

在Linux shell脚本中,如果达到某个时间限制,我想使用 timeout 命令结束另一个命令。一般来说:

timeout -s SIGTERM 100 command

但是我也希望在命令因某些原因失败时退出我的shell脚本。如果命令提前失败,则不会达到时间限制,超时将以退出代码0退出。因此,陷阱设置-e ,至少我已经尝试过它并没有奏效。我怎样才能达到我想做的目的?

1 个答案:

答案 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的陷阱。