如何在一定时间后停止读取行shell脚本?

如何在一定时间后停止读取行shell脚本?

我正在执行这个命令:

tail -f rest.log | while read 
LOGLINE
do
    [[ "${LOGLINE}" == *"Finished building"* ]] && pkill -P $$ tail
done

它将读取日志文件,直到文件中出现字符串“完成构建”。如果是这样,它将终止该tail命令。有时该字符串永远不会出现。对于这种情况,我想在一段时间后退出循环。有点超时。假设它应该在 5 分钟后停止搜索字符串。我怎样才能实现这个目标?我尝试在第一个命令前面使用超时tail,但这对我不起作用。

答案1

试试这个:read有内置的超时选项-t

while read -t 10 LOGLINE 
do
  [[ "${LOGLINE}" == *"Finished building"* ]] && pkill -P $$ tail
 done

以上结束后10 seconds。在 中提及您所需的超时seconds。更多参考man read

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]

答案2

另一种选择是在另一个脚本中使用具有 while 循环的超时命令:

timeout 300 script_that_searches_for_finished_build.sh

该脚本将运行 5 分钟然后停止。

相关内容