退出shell脚本中的tail -f

埃里卡

我似乎无法使这项工作。这是脚本。

tail -fn0 nohup.out | while read line; do

    if [[ "${line}" =~ ".*ERIKA.*" ]]; then

        echo "match found"
        break

    fi

done

echo "Search done"

即使找到匹配项,代码回显“搜索完成”也不会运行。我只希望在找到匹配项后运行其余代码。我还没有实现。

抱歉,我是日志监视的新手。有什么解决方法吗?

我将通过Jenkins运行脚本,因此,代码应该可以自由流动并且不需要任何用户交互。

请帮忙,谢谢。

佩林

您在这里遇到了几个问题:

  1. tail会一直运行,直到无法写入其输出管道为止,这样,直到tail退出,管道才会完成。直到脚本退出并且将另一行(如果缓冲,请参见下文)(可能是4K)写入日志文件,导致它尝试写入其输出管道之后,它才会执行该操作。(重新缓冲:通过管道写入时,大多数程序会切换到4K缓冲。除非tail显式设置其缓冲,否则会影响上述行为)。

  2. 您的正则表达式:"${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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在shell脚本中摆脱tail -f

来自分类Dev

如何退出tail -f并恢复脚本

来自分类Dev

当文件被移动或删除时,bash脚本使“ tail -f”退出

来自分类Dev

如何在shell脚本中使用tail -f?

来自分类Dev

如何从tail -f返回基础脚本

来自分类Dev

F 中的脚本 *

来自分类Dev

如何使用Shell脚本从vi中退出?

来自分类Dev

从shell脚本中的函数捕获退出状态

来自分类Dev

如何退出在脚本中打开的shell?

来自分类Dev

在“陷阱退出”中获取shell脚本的退出代码。

来自分类Dev

退出shell脚本

来自分类Dev

不退出 shell 脚本

来自分类Dev

grep和tail -f?

来自分类Dev

解释shell脚本中test -f vs test -e的差异和用法

来自分类Dev

为什么不`tail -f…| grep -q…`找到匹配项后退出吗?

来自分类Dev

如何在不使用Ctrl + c的情况下退出“ tail -f”模式?

来自分类Dev

pgrep -f以1退出

来自分类Dev

如何在Shell脚本中捕获退出1信号?

来自分类Dev

使用陷阱在ZSH中退出shell脚本的正确方法?

来自分类Dev

如果 shell 脚本中的错误不起作用,则退出?

来自分类Dev

如何在bash中破坏tail -f命令

来自分类Dev

tail -f在Ubuntu live CD中不产生任何输出

来自分类Dev

如何在bash中破坏tail -f命令

来自分类Dev

自动在`tail -f`中插入空白行

来自分类Dev

windows powershell中tail -f的等价物是什么?

来自分类Dev

从子shell脚本中的功能退出到父shell脚本

来自分类Dev

变量分配退出Shell脚本

来自分类Dev

在shell脚本中间退出sudo

来自分类Dev

变量赋值退出Shell脚本