Risposte:
Un'idea potrebbe essere quella di convogliare l'output di tail
through sed
e sostituire la newline con bell / newline.
Ma esiste probabilmente una soluzione più semplice se si utilizza tail
all'interno di una x-window . Lì puoi eseguire un'azione quando cambia il contenuto della finestra (sfarfallio, campana, qualunque cosa).
sed
idea è 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.
sed -e $'s/$/\a/'
aggiunge un $'\a'
(carattere di campana nella sintassi ksh / bash / zsh) alla fine di ogni riga.
sed
regexpt è un po 'strano per i miei occhi ingenui.
$'...'
sintassi non è universale. Ad esempio, [t] csh non lo supporta.
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 say
comando di Mac OS X per leggere il file che stai guardando. basta ottenere il logtail
comando, 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
screen
mostra 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)
beep
comando, invece di say
.
exec
comando screen per farlo. L'esempio nella manpage è !:sed -n s/.*Error.*/\007/p
che invierà un campanello ogni volta che "Error" viene visualizzato in quella finestra.
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
Solo per la cronaca, come suggerito da @Nils sto usando sed
per aggiungere un bell
a ogni riga.
La sed
linea fornita da @Gilles
sed -e $'s/$/\a/'
funziona sul mio mac (ho abilitato "suoneria sonora" e "campana visiva" nel mio Terminale \ preferenze \ avanzate).
$'...'
sequenze di escape sono una cosa solo per Bash.
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 ...
Puoi provare konsole
che consente di avvisare di nuove attività (o silenzio) in una determinata scheda.
konsole
sarebbe come screen
avvisi una volta, mentre ho bisogno di ricevere un avviso per ogni nuova riga.