Gibt es eine Möglichkeit, Schwanz-Piepton zu machen?

23

Gibt es eine Möglichkeit zu machen tail -Foder zu lesspiepen (klingeln in einem Terminal), wenn neue Daten eingehen (eine neue Zeile wird zur Datei hinzugefügt)? Oder gibt es ein anderes Unix-Dienstprogramm, um dies auf einem Linux oder Mac zu tun.

Ali
quelle

Antworten:

13

Eine Idee wäre, die Ausgabe von tailthrough zu sedleiten und die Newline durch bell / newline zu ersetzen.

Aber es gibt wahrscheinlich eine einfachere Lösung, wenn Sie tailinnerhalb eines X-Fensters verwenden . Dort können Sie eine Aktion ausführen, wenn sich der Inhalt des Fensters ändert (Flackern, Klingeln, was auch immer).

Nils
quelle
4
Ersetzen Sie die neue Zeile nicht, sondern fügen Sie sie am Ende der Zeile hinzu.
Kevin
@Nils, diese sedIdee ist genial, aber ich kenne nicht genug "sed", um sie zum Laufen zu bringen. Es sieht so aus, als ob ich keine Zeilenumbrüche auf die übliche Weise erfassen kann (wie ich es gewohnt bin). Ich denke, ich muss sed Bescheid geben interpretiere den eingehenden Stream nicht zeilenweise.
Ali
5
@Ali Tatsächlich handelt sed Zeile für Zeile und Sie sehen die Zeilenumbrüche nicht direkt. Fügt am Ende jeder Zeile sed -e $'s/$/\a/'ein $'\a'(Bell-Zeichen in ksh / bash / zsh-Syntax) hinzu.
Gilles 'SO - hör auf, böse zu sein'
Danke @Gilles, hat wie ein Zauber gewirkt (auch auf einem Mac)! sedRegexpt ist ein bisschen seltsam für meine naiven Augen.
Ali
1
@ Gilles: Beachten Sie, dass die $'...'Syntax nicht universell ist. Beispielsweise unterstützt [t] csh dies nicht.
Keith Thompson
13

Wenn Sie GNU verwenden screen, können Sie es so einstellen, dass es das Fenster mit dem Schwanz "beobachtet" und Sie in Ihrer Statusleiste oder durch die definierte Glocke Ihres TermCaps benachrichtigt, dass es in diesem Fenster neue Ausgaben gibt.

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


edit: musste dies nur hinzufügen, da du mac os x erwähnt hast

Nur zum Spaß, wenn Sie nach etwas Bestimmtem suchen, können Sie den sayBefehl von Mac OS X verwenden , um die Datei zu lesen, die Sie gerade ansehen. Holen Sie sich einfach den logtailBefehl von:

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

Und benutze es in einem Skript wie:

#!/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 Kennedy
quelle
Danke @Tim, screenShows und Alarm (ich schätze, ich kann es auch klingeln lassen) NUR EINMAL. Nicht für jedes neue Ereignis, das passiert (nicht für jede neue Linie, die verfügbar ist)
Ali
1
Ich habe ein Beispiel für Mac hinzugefügt, das Ihnen die Datei vorlesen kann. Sie können dies so ändern, dass es unter Linux funktioniert, indem Sie die Linux-Version von logtail installieren und stattdessen den beepBefehl verwenden say.
Tim Kennedy
cool! Das ist kreativ, obwohl ich in meinem Fall den Signalton verwende, um eine Protokolldatei überwachen zu können, ohne auf den Bildschirm zu schauen. Und der tatsächliche Piepton ist möglicherweise besser als eine Stimme.
Ali
1
Kann auch den execBefehl screen verwenden, um dies zu tun. Das Beispiel auf der Hilfeseite !:sed -n s/.*Error.*/\007/psendet jedes Mal eine Glocke, wenn "Fehler" in diesem Fenster angezeigt wird.
Arcege
Gleiches gilt für Tmux.
0xC0000022L
10

Sie könnten Multitail verwenden . Es ist ein erweiterter Tail, der die Befehlsausführung bei Übereinstimmung mit regulären Ausdrücken unterstützt.

Beispiel: Der folgende Befehl gibt einen Ton aus und öffnet jedes Mal, wenn ein Martian- Quellpaket protokolliert wird, ein xmessage-Fenster .

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

Nur für das Protokoll, wie @Nils vorgeschlagen Ich verwende sedein hinzufügen bellzu jeder Zeile.

Die sedvon @Gilles bereitgestellte Zeile

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

Funktioniert auf meinem Mac (Ich habe in meinen Terminal \ Einstellungen \ Erweitert "Akustische Glocke" und "Visuelle Glocke" aktiviert).

Ali
quelle
Bemerkenswert ist, dass $'...'Escape-Sequenzen eine reine Bash-Sache sind.
Amphetamachine
@amphetamachine Danke, obwohl ich selbst ein Bash-Benutzer bin, wäre es schön, wenn Sie oder andere Versionen hinzufügen könnten, die auch für andere Shells funktionieren würden.
Ali
Ich bin auch ein Bash-Benutzer, aber ich lerne langsam, was in anderen Shells funktioniert und was nicht.
Amphetamachine
1

Für alle anderen, die diese Seite finden, verwende ich tcsh und dies scheint zu funktionieren:

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

Fragen Sie mich nicht, was die sed-Syntax bedeutet ...

raymond
quelle
1
Ich kann mir nicht helfen, ich muss fragen, können Sie sed Ausdruck erklären?
Ashwani Agarwal
0

Sie können versuchen konsole, auf einer Registerkarte einen Alarm für neue Aktivitäten (oder Stille) zu aktivieren.

Aaron D. Marasco
quelle
Ich stelle mir vor, es konsolewürde screeneinmal Alarm geben, während ich für jede neue Zeile einen Alarm erhalten muss.
Ali