C'è un modo per emettere un bip di coda?


23

C'è un modo per fare tail -Fo emettere un lesssegnale acustico (suonare il campanello in un terminale) quando arrivano nuovi dati (una nuova linea viene aggiunta al file). O c'è qualche altra utility unix per fare questo su Linux o Mac.

Risposte:


13

Un'idea potrebbe essere quella di convogliare l'output di tailthrough sede sostituire la newline con bell / newline.

Ma esiste probabilmente una soluzione più semplice se si utilizza tailall'interno di una x-window . Lì puoi eseguire un'azione quando cambia il contenuto della finestra (sfarfallio, campana, qualunque cosa).


4
Non sostituire la nuova riga, aggiungila alla fine della riga.
Kevin,

@Nils, questa sedidea è geniale ma non conosco abbastanza 'sed' per farlo funzionare, sembra che non riesca a catturare le nuove righe nella regexpt nel solito modo (a cui sono abituato), immagino di dover dire a sed non interpretare il flusso in entrata riga per riga.
Ali,

5
@Ali In effetti, sed agisce riga per riga e non si vedono direttamente le nuove righe. sed -e $'s/$/\a/'aggiunge un $'\a'(carattere di campana nella sintassi ksh / bash / zsh) alla fine di ogni riga.
Gilles 'SO- smetti di essere malvagio' il

Grazie @Gilles, ha funzionato come un fascino (anche su un mac)! sedregexpt è un po 'strano per i miei occhi ingenui.
Ali,

1
@Gilles: Nota che la $'...'sintassi non è universale. Ad esempio, [t] csh non lo supporta.
Keith Thompson,

13

se usi GNU screen, puoi impostarlo per "guardare" la finestra con la coda, e ti avviserà nella barra di stato, o dalla campana definita del termcap, che c'è un nuovo output in quella finestra.

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


modifica: ho dovuto solo aggiungere questo, poiché hai menzionato mac os x

solo per divertimento, se stavi cercando qualcosa in particolare, puoi usare il saycomando di Mac OS X per leggere il file che stai guardando. basta ottenere il logtailcomando, da:

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

E usalo in uno script come:

#!/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

Grazie @Tim, screenmostra e avvisa (suppongo di riuscire a far suonare anche il campanello) SOLO UNA VOLTA. Non per ogni nuovo evento che accade (non per ogni nuova linea disponibile)
Ali,

1
ho aggiunto un esempio per Mac che potrebbe leggere il file. potresti cambiarlo in modo che funzioni per Linux installando la versione Linux di logtail e usando il beepcomando, invece di say.
Tim Kennedy,

freddo! Questo è creativo, anche se nel mio caso sto usando il segnale acustico per essere in grado di monitorare un file di registro senza guardare lo schermo. E il segnale acustico effettivo potrebbe essere migliore di una voce.
Ali,

1
Puoi anche usare il execcomando screen per farlo. L'esempio nella manpage è !:sed -n s/.*Error.*/\007/pche invierà un campanello ogni volta che "Error" viene visualizzato in quella finestra.
Arcege,

Lo stesso vale per Tmux.
0xC0000022L

10

Puoi usare il multitail . È una coda potenziata che supporta l'esecuzione dei comandi sulla corrispondenza delle espressioni regolari.

Ad esempio, il seguente comando riproduce un suono e apre una finestra xmessage ogni volta che viene registrato un pacchetto sorgente marziano .

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

4

Solo per la cronaca, come suggerito da @Nils sto usando sedper aggiungere un bella ogni riga.

La sedlinea fornita da @Gilles

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

funziona sul mio mac (ho abilitato "suoneria sonora" e "campana visiva" nel mio Terminale \ preferenze \ avanzate).


Da notare che le $'...'sequenze di escape sono una cosa solo per Bash.
anfetamachina,

@amphetamachine grazie, mentre io stesso sono un utente bash, sarebbe bello se tu o altri potessi aggiungere versioni che funzionerebbero anche su altre shell.
Ali,

Sono anche un utente bash, ma sto lentamente imparando cosa funzionerà e non funzionerà in altre shell.
anfetamachina,

1

Per chiunque trovi questa pagina, sto usando tcsh e questo sembra funzionare:

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

Non chiedermi cosa significa la sintassi sed ...


1
Non posso fare a meno di me stesso, devo chiedere, puoi spiegare l'espressione sed?
Ashwani Agarwal,

0

Puoi provare konsoleche consente di avvisare di nuove attività (o silenzio) in una determinata scheda.


Immagino che konsolesarebbe come screenavvisi una volta, mentre ho bisogno di ricevere un avviso per ogni nuova riga.
Ali,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.