我正在执行这个命令:
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 分钟然后停止。