我希望我的电脑在每次发生尾部事件时发出系统蜂鸣声
我有以下命令
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>
在两个窗口之间切换),您可以获得两全其美的效果:
- 监控,
tail -f yourfile.log | grep 'something rare'
- 不受监控,用一个简单的
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
,但这一直向我抱怨参数无效。我还发现了一篇帖子,声称您需要重新编译内核才能更改此限制。