Respuestas:
Una idea puede ser canalizar la salida de tailthrough sedy reemplazar la nueva línea con campana / nueva línea.
Pero existe una solución más fácil si se usa taildentro de una ventana x . Allí puede ejecutar una acción cuando el contenido de la ventana cambia (parpadeo, campana, lo que sea).
sedidea 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.
sedregexpt 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 saycomando de Mac OS X para leer el archivo que estás viendo. solo obtenga el logtailcomando, 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
screenmuestra 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)
beepcomando, en lugar de say.
execcomando de pantalla para hacerlo también. El ejemplo en la página de manual es el !:sed -n s/.*Error.*/\007/pque 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 sedpara agregar un bella cada línea.
La sedlí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 konsolecuál permite la alerta sobre nueva actividad (o silencio) en cualquier pestaña.
konsoleque sería como screenalertar una vez, mientras que necesito recibir una alerta para cada nueva línea.