如何在 tail -f 事件上发出哔哔声

如何在 tail -f 事件上发出哔哔声

我希望我的电脑在每次发生尾部事件时发出系统蜂鸣声

我有以下命令

tail -f development.log | grep "something rare"

有没有简单的方法,比如把它连接到会发出哔哔声的东西上?比如

tail -f development.log | grep "something rare" | beep

如果是这样,grep 输出还会显示吗?

答案1

定义beep如下:

beep() { read a || exit; printf "$a\007\n"; beep; }

然后,您可以使用命令:

tail -f development.log | grep "something rare" | beep

答案2

GNU 屏幕具有内置功能,可在给定窗口发生变化时发出蜂鸣声:请参阅手册页的相关部分

标题摘要:

$ screen
$ tail -f yourfile.log    # inside the screen session
<C-a> M    # "Window 0 (bash) is now being monitored for all activity."

正如评论中指出的那样,这将发出哔哔声每一个新的日志条目,而不仅仅是那些与“罕见的东西”相匹配的条目,所以这并不完全符合 OP 的要求。在我看来,这仍然是一个有用的技巧。

screen通过打开两个窗口(<C-a> c打开一个窗口、<C-a> <C-a>在两个窗口之间切换),您可以获得两全其美的效果:

  1. 监控,tail -f yourfile.log | grep 'something rare'
  2. 不受监控,用一个简单的tail -f yourfile.log

然后,您可以坐在窗口 2 中观看日志滚动过去,当发生“罕见的事情”时,您会从窗口 1 中听到哔哔声。

screen用途非常广泛——我强烈建议您阅读它。

答案3

您可以使用 sed 添加 control-G,如下所示:

tail -f myFile | sed "s/.*/&\x07/"

或者仅在稀有行上,不使用 grep,如下所示:

tail -f myFile | sed -n "/something rare/s/.*/&\x07/p"

意思是:在发生罕见事件的地方,s用 Control-G 替换所有内容,并将其粘贴在末尾,然后打印(但不要打印不匹配的行)。效果很好!

答案4

嗯,有点棘手。我们或许可以做这样的事?

for i in `find | grep 7171`; do beep; echo $i; done

或者你的情况

for i in `tail -f development.log | grep "something rare"`; do beep; echo $i; done

不过它似乎在进行一些缓冲。我会看看是否有办法通过循环关闭此缓冲for

显然,您应该能够通过使用来调整管道的缓冲ulimit -p,但这一直向我抱怨参数无效。我还发现了一篇帖子,声称您需要重新编译内核才能更改此限制。

相关内容