我似乎无法使这项工作。这是脚本。
tail -fn0 nohup.out | while read line; do
if [[ "${line}" =~ ".*ERIKA.*" ]]; then
echo "match found"
break
fi
done
echo "Search done"
即使找到匹配项,代码回显“搜索完成”也不会运行。我只希望在找到匹配项后运行其余代码。我还没有实现。
抱歉,我是日志监视的新手。有什么解决方法吗?
我将通过Jenkins运行脚本,因此,代码应该可以自由流动并且不需要任何用户交互。
请帮忙,谢谢。
您在这里遇到了几个问题:
tail会一直运行,直到无法写入其输出管道为止,这样,直到tail退出,管道才会完成。直到脚本退出并且将另一行(如果缓冲,请参见下文)(可能是4K)写入日志文件,导致它尝试写入其输出管道之后,它才会执行该操作。(重新缓冲:通过管道写入时,大多数程序会切换到4K缓冲。除非tail显式设置其缓冲,否则会影响上述行为)。
您的正则表达式:"${line}" =~ ".*ERIKA.*"
与我不匹配。但是,"${line}" =~ "ERIKA"
确实匹配。
您可以使用tail--pid
选项作为第一个问题的解决方案。这是一个示例,重新编写脚本以使用该选项:
while read line; do
if [[ "${line}" =~ "ERIKA" ]]; then
echo "match found"
break
fi
done < <(tail --pid=$$ -f /tmp/out)
echo "Search done"
格伦·杰克曼(Glenn Jackman)的杀死方法是另一种终止尾巴的方法。
也许考虑用bash以外的方式进行此操作:perl有一个不错的File :: Tail模块,该模块实现了尾部行为。
与这个问题有关的问题还有很多,您可能会在他们的答案中找到自己喜欢的东西:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句