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

Jak*_*aba 16 linux terminal pipe

我希望我的 PC 在每个尾部事件时发出系统蜂鸣声

我有以下命令

tail -f development.log | grep "something rare"
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法,比如将它输送到发出哔哔声的东西?喜欢

tail -f development.log | grep "something rare" | beep
Run Code Online (Sandbox Code Playgroud)

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

mou*_*iel 18

只需定义beep如下:

beep() { read a || exit; printf "$a\007\n"; beep; }
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用您的命令:

tail -f development.log | grep "something rare" | beep
Run Code Online (Sandbox Code Playgroud)

  • @David - 这是一种命中注定的方法。如果要取消缓冲通过管道传递的数据,请使用以下答案中描述的任何方法:http://stackoverflow.com/questions/1000674/turn-off-buffering-in-pipe (6认同)
  • 尽管 tail -f 的直接输出是立即的,但它一旦通过管道就会被缓冲。在观察任何事物之前,您必须等待足够多的“稀有事物”。 (4认同)
  • 根据@nagul 的建议,这里是对我有用的调用:`tail -f development.log | stdbuf -oL -eL grep "稀有的东西" | 哔` (2认同)

Sam*_*kes 10

GNU screen有一个内置功能,可以在给定窗口更改时发出哔哔声:请参阅手册页的相关部分

标题摘要:

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

正如评论中指出的那样,这将在每个新日志条目上发出哔哔声,而不仅仅是那些匹配“罕见的东西”的条目,所以这并不能满足 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 非常多才多艺 - 我强烈建议阅读它。