有没有办法使尾巴-F发出哔声?


23

当有新数据传入时(有新行添加到文件中),有没有办法发出tail -Fless发出蜂鸣声(在终端响起铃声)。还是在Linux或Mac上有其他的Unix实用程序来执行此操作。

Answers:


13

一个想法migth是管的输出tail通过sed,并替换为钟/换行符的换行符。

但是,如果tailx窗口中使用,则可能存在更简单的解决方案。当窗口内容更改(闪烁,响铃或其他)时,您可以在其中执行操作。


4
不要替换换行符,将其添加到行尾。
凯文

@Nils,这个sed想法很棒,但是我不知道足够的“ sed”来使其起作用,看来我无法以常规方式(我习惯于)在正则表达式中捕获换行符,我想我需要告诉sed不要逐行解释传入的流。
阿里

5
@Ali实际上,sed逐行执行,您不会直接看到换行符。在每行的末尾sed -e $'s/$/\a/'添加$'\a'(以ksh / bash / zsh语法表示的响铃字符)。
吉尔(Gilles)“所以,别再邪恶了”,

谢谢@Gilles,就像是魅力一样(在Mac上也是如此)!sedregexpt对我幼稚的眼睛有点奇怪。
阿里

1
@Gilles:请注意,$'...'语法不是通用的。例如,[t] csh不支持它。
基思·汤普森

13

如果使用GNU screen,则可以将其设置为用尾巴“观察”窗口,它将在状态栏中或termcap定义的铃铛中提醒您该窗口中有新输出。

http://www.gnu.org/software/screen/manual/html%5Fnode/Monitor.html#Monitor


编辑:只需添加此,因为您提到了Mac OS X

仅出于娱乐目的,如果您正在寻找特别的东西,可以使用Mac OS X的say命令来读取您正在查看的文件。只需从以下logtail命令获取命令:

http://www.hmug.org/pub/MacOS_X/BSD/Administration/Log/logcheck/

并在如下脚本中使用它:

#!/bin/bash

file=$1
offset=$(basename "$1")

# while true... let this thing run until it's killed...
while true; do
    output=$(/usr/local/bin/logtail $file .${offset}.offset)
    if [ ! -z "$output" ]; then

        # print the output and say ding
        echo "$output" && say ding
        # to have the file read aloud to you, uncomment the following:
        say "$output"

        fi
    # recheck every 5 seconds
    sleep 5
done

感谢@Tim,仅screen显示一次并显示警报(我想我也可以使它响起)。并非针对发生的每个新事件(并非针对每个可用的新行)
阿里

1
我为Mac添加了一个示例,可以向您读取文件。您可以通过安装Linux版本的logtail并使用beep命令(而不是)来将其更改为适用于Linux say
蒂姆·肯尼迪

凉!这是很有创意的,尽管就我而言,我正在使用提示音来监视日志文件,而无需查看屏幕。而且实际的哔哔声可能比声音还好。
阿里

1
也可以使用screen的exec命令来做。手册页中的示例是!:sed -n s/.*Error.*/\007/p,每次在该窗口中显示“错误”时,都会发出响铃。
弓箭2011年

同样适用于Tmux。
0xC0000022L

10

您可以使用multitail。它是增强的尾部,支持在正则表达式匹配时执行命令。

例如,以下命令会在每次记录火星源数据包时播放声音并打开xmessage窗口。

multitail -ex "martian source" "play beep.wav; xmessage " -i /var/log/messages

4

仅作记录,正如@Nils所建议的那样,我正在向每行sed添加一个bell

sed由@Gilles提供线

sed -e $'s/$/\a/' 

在我的Mac上可以使用(我在Terminal \ preferences \ advanced中启用了“音频铃声”和“可视铃声”)。


值得注意的是,$'...'转义序列仅适用于Bash。
amphetamachine

@amphetamachine谢谢,虽然我本人是bash用户,但如果您或其他人可以添加也可以在其他shell上使用的版本,那就太好了。
阿里

我也是bash用户,但我正在慢慢学习在其他shell中将行不行的事情。
amphetamachine

1

对于找到此页面的其他人,我正在使用tcsh,这似乎可行:

tail -f changingfile | sed -e 's/.*/& \a/'

不要问我sed语法是什么意思...


1
我不得不问自己,你能解释sed表达吗?
Ashwani Agarwal

0

您可以尝试konsole在任何给定的选项卡中允许对新活动(或静音)发出警报。


konsolescreen它会发出一次警报,而我需要为每条新线都收到一条警报。
阿里
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.