Respuestas:
Una idea puede ser canalizar la salida de tail
through sed
y reemplazar la nueva línea con campana / nueva línea.
Pero existe una solución más fácil si se usa tail
dentro de una ventana x . Allí puede ejecutar una acción cuando el contenido de la ventana cambia (parpadeo, campana, lo que sea).
sed
idea es brillante, pero no sé lo suficiente 'sed' para que funcione, parece que no puedo capturar nuevas líneas en la expresión regular de la manera habitual (que estoy acostumbrado), creo que necesito decirle a sed no interprete el flujo entrante línea por línea.
sed -e $'s/$/\a/'
agrega un $'\a'
(carácter de campana en la sintaxis ksh / bash / zsh) al final de cada línea.
sed
regexpt es un poco extraño para mis ojos ingenuos.
$'...'
sintaxis no es universal. Por ejemplo, [t] csh no lo admite.
si usa GNU screen
, puede configurarlo para que "mire" la ventana con la cola, y lo alertará en su barra de estado, o por la campana definida de su termcap, que hay una nueva salida en esa ventana.
http://www.gnu.org/software/screen/manual/html%5Fnode/Monitor.html#Monitor
editar: solo tuve que agregar esto, ya que mencionaste mac os x
solo por diversión, si estabas buscando algo en particular, puedes usar el say
comando de Mac OS X para leer el archivo que estás viendo. solo obtenga el logtail
comando, de:
http://www.hmug.org/pub/MacOS_X/BSD/Administration/Log/logcheck/
Y úsalo en un script como:
#!/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
muestra y alerta (supongo que también puedo hacer que suene la campana) SOLO UNA VEZ. No por cada nuevo evento que sucede (no por cada nueva línea que está disponible)
beep
comando, en lugar de say
.
exec
comando de pantalla para hacerlo también. El ejemplo en la página de manual es el !:sed -n s/.*Error.*/\007/p
que enviará una campana cada vez que se muestre "Error" en esa ventana.
Podrías usar multitail . Es una cola mejorada que admite la ejecución de comandos en la coincidencia de expresiones regulares.
Por ejemplo, el siguiente comando reproduce un sonido y abre una ventana xmessage cada vez que se registra un paquete fuente marciano .
multitail -ex "martian source" "play beep.wav; xmessage " -i /var/log/messages
Solo para el registro, como @Nils sugirió que estoy usando sed
para agregar un bell
a cada línea.
La sed
línea proporcionada por @Gilles
sed -e $'s/$/\a/'
funciona en mi mac (habilité "timbre audible" y "timbre visual" en mi Terminal \ preferencias \ avanzado).
$'...'
secuencias de escape son una cosa solo de Bash.
Para cualquier otra persona que encuentre esta página, estoy usando tcsh y esto parece funcionar:
tail -f changingfile | sed -e 's/.*/& \a/'
No me preguntes qué significa la sintaxis sed ...
Puede probar konsole
cuál permite la alerta sobre nueva actividad (o silencio) en cualquier pestaña.
konsole
que sería como screen
alertar una vez, mientras que necesito recibir una alerta para cada nueva línea.