Existe-t-il un moyen d'émettre un bip queue -F?

23

Existe-t-il un moyen d'émettre tail -Fou d' lessémettre un bip (faire sonner la cloche dans un terminal) lorsque de nouvelles données arrivent (une nouvelle ligne est ajoutée au fichier). Ou existe-t-il un autre utilitaire Unix pour le faire sur un Linux ou un Mac?

Ali
la source

Réponses:

13

Une idée pourrait être de diriger la sortie de tailthrough sedet de remplacer la nouvelle ligne par bell / newline.

Mais il y a propably une solution plus facile si vous utilisez taildans un x-fenêtre . Là, vous pouvez exécuter une action lorsque le contenu de la fenêtre change (scintillement, cloche, peu importe).

Nils
la source
4
Ne remplacez pas la nouvelle ligne, ajoutez-la à la fin de la ligne.
Kevin
@Nils, cette sedidée est géniale mais je ne connais pas assez de «sed» pour le faire fonctionner, il semble que je ne peux pas capturer les nouvelles lignes dans le regexpt de la manière habituelle (à laquelle j'ai l'habitude), je suppose que je dois dire à sed n'interprétez pas le flux entrant ligne par ligne.
Ali
5
@Ali En effet, sed agit ligne par ligne et vous ne voyez pas directement les nouvelles lignes. sed -e $'s/$/\a/'ajoute un $'\a'(caractère de cloche dans la syntaxe ksh / bash / zsh) à la fin de chaque ligne.
Gilles 'SO- arrête d'être méchant'
Merci @Gilles, a fonctionné comme un charme (sur un mac aussi)! sedregexpt est un peu étrange à mes yeux naïfs.
Ali
1
@Gilles: Notez que la $'...'syntaxe n'est pas universelle. Par exemple, [t] csh ne le prend pas en charge.
Keith Thompson
13

si vous utilisez GNU screen, vous pouvez le configurer pour "regarder" la fenêtre avec la queue, et il vous avertira dans votre barre d'état, ou par la cloche définie de votre termcap, qu'il y a une nouvelle sortie dans cette fenêtre.

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


edit: je devais juste ajouter ceci, puisque vous avez mentionné mac os x

juste pour le plaisir, si vous cherchez quelque chose en particulier, vous pouvez utiliser la saycommande de Mac OS X pour vous lire le fichier que vous regardez. obtenez simplement la logtailcommande, depuis:

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

Et utilisez-le dans un script comme:

#!/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
la source
Merci @Tim,, screenmontre et alerte (je suppose que je peux aussi faire sonner la cloche) UNE SEULE FOIS. Pas pour chaque nouvel événement qui se produit (pas pour chaque nouvelle ligne disponible)
Ali
1
j'ai ajouté un exemple pour mac qui pourrait vous lire le fichier. vous pouvez changer cela pour qu'il fonctionne pour linux en installant la version linux de logtail et en utilisant la beepcommande à la place de say.
Tim Kennedy
cool! C'est créatif, bien que dans mon cas j'utilise le bip pour pouvoir surveiller un fichier journal sans regarder l'écran. Et le bip réel peut être meilleur qu'une voix.
Ali
1
Peut également utiliser la execcommande d' écran pour le faire également. L'exemple dans la page de manuel est celui !:sed -n s/.*Error.*/\007/pqui enverra une cloche chaque fois que "Error" est affiché dans cette fenêtre.
Arcege
Il en va de même pour Tmux.
0xC0000022L
10

Vous pouvez utiliser le multitail . Il s'agit d'une queue améliorée qui prend en charge l'exécution de commandes lors d'une correspondance d'expressions régulières.

Par exemple, la commande suivante émet un son et ouvre une fenêtre xmessage chaque fois qu'un paquet source martien est enregistré.

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

Juste pour mémoire, comme @Nils a suggéré que j'utilise sedpour ajouter un bellà chaque ligne.

La sedligne fournie par @Gilles

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

fonctionne sur mon mac (j'ai activé "cloche audible" et "cloche visuelle" dans mon Terminal \ préférences \ avancées).

Ali
la source
Il convient de noter que les $'...'séquences d'échappement sont une chose uniquement Bash.
amphétamachine
@amphetamachine merci, même si je suis moi-même un utilisateur bash, ce serait bien si vous ou d'autres pouvez ajouter des versions qui fonctionneraient également sur d'autres shells.
Ali
Je suis également un utilisateur bash, mais j'apprends lentement ce qui fonctionnera et ne fonctionnera pas dans d'autres shells.
amphétamachine
1

Pour toute autre personne qui trouve cette page, j'utilise tcsh et cela semble fonctionner:

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

Ne me demandez pas ce que signifie la syntaxe sed ...

raymond
la source
1
Je ne peux pas m'en empêcher, je dois demander, pouvez-vous expliquer l'expression sed?
Ashwani Agarwal
0

Vous pouvez essayer konsolece qui permet d'alerter sur une nouvelle activité (ou silence) dans n'importe quel onglet donné.

Aaron D. Marasco
la source
J'imagine que konsolecela ressemblerait screenà une alerte une fois, alors que je dois recevoir une alerte pour chaque nouvelle ligne.
Ali