Quiero que mi PC emita un pitido del sistema en cada evento de cola
Tengo el siguiente comando
tail -f development.log | grep "something rare"
¿Hay alguna manera fácil como canalizarlo a algo que suene? me gusta
tail -f development.log | grep "something rare" | beep
si es así, ¿se mostrará la salida grep?
Respuestas:
Simplemente defina
beep
lo siguiente:Entonces, puedes usar tu comando:
fuente
sed
o similar (entre cola y grep) con una expresión regular reemplazar lasomething rare
misma muchas veces. La cantidad de veces que debe hacerse depende de la cantidad de almacenamiento de la tubería.tail -f development.log | stdbuf -oL -eL grep "something rare" | beep
La pantalla GNU tiene una función incorporada para emitir un pitido cuando cambia una ventana determinada: consulte la sección correspondiente de la página de manual .
Resumen del titular:
Como se señaló en los comentarios, esto emitirá un pitido en cada entrada de registro nueva, no solo en aquellas que coincidan con "algo raro", por lo que esto no hace exactamente lo que solicitó el OP. Sigue siendo un truco útil para saber en mi humilde opinión.
Puede obtener lo mejor de ambos mundos abriendo dos
screen
ventanas (<C-a> c
para abrir una ventana,<C-a> <C-a>
para alternar entre dos ventanas):tail -f yourfile.log | grep 'something rare'
tail -f yourfile.log
Luego, puede sentarse mirando el registro desplazarse en la ventana 2, y se escuchará un pitido desde la ventana 1 cuando ocurra "algo raro".
screen
es increíblemente versátil: recomiendo leerlo.fuente
tail -f yourfile.log | grep something\ rare
más que sólo eltail -f logfile
something rare
. Editado para reflejar esto. El grep funcionaría, pero luego no vería el resto del registro, solo las líneas raras; según tengo entendido, quiere poder ver todo el registro desplazándose, pero recibir alertas sobre eventos específicos.Puede detener la salida de la memoria intermedia en el comando grep. Ver man grep para más detalles.
Puede canalizar la salida grep en pitido.
El siguiente ejemplo es del hombre beep ...
Hay muchas cosas buenas en esos manuales. Si tan solo no tuviéramos que leerlos para encontrarlo. ;-)
fuente
El comando watch tiene una opción --beep, y también puede establecer el intervalo de sondeo, pero el estándar con 2 segundos debería estar bien
fuente
watch
funciona ejecutando su parámetro / comando en cada sección (intervalo) y luego enviando los resultados a la ejecución anterior. Por lo tanto, querrá usar la versión normal del comando de cola, en lugar de usartail -f
watch --beep
y envolver mi cola / grep, aún no recibí un pitido).Puede usar sed para agregar el control-G de la siguiente manera:
o solo en líneas raras, sin usar grep, de la siguiente manera:
que dice: en las líneas donde se produce algo raro, s ubstitute todo por el mismo material con el control G-tachuelas en el final, y de impresión (pero no se imprimen las líneas no coincidentes). ¡Funciona genial!
fuente
Hm, complicado. ¿Quizás podríamos hacer algo como esto?
O en tu caso
Sin embargo, parece estar haciendo algo de almacenamiento en búfer. Veré si hay una manera de desactivar este almacenamiento intermedio por
for
bucle.Aparentemente, deberías poder ajustar el almacenamiento en búfer de la tubería mediante el uso,
ulimit -p
pero eso sigue quejándome sobre el argumento no válido para mí. También encontré una publicación que dice que necesitas recompilar el kernel para cambiar este límite.fuente
En un trabajo anterior, no pude conseguir un observador fiable con solo comando-fu, así que tenía un guión envoltorio como la de abajo, que inspeccionó el archivo cada poll_duration segundos y grepped las nuevas líneas para la frase interesados.
Esto estaba en una máquina Unix. En Linux, puede ir mejor usando su interfaz inotify filewatcher. Si este paquete ( inotify-tools en Ubuntu) está presente, reemplace
con
Esta llamada se bloquea hasta que se modifica el archivo. La versión de bloqueo es casi tan eficiente como lo que obtendría con la
tail -f
versión si la tubería se pudiera configurar para funcionar sin almacenamiento en búfer.Nota: El script primero hace una
head --lines=$new_linecount
para garantizar que las líneas agregadas al archivo después de que lo verifiquemos no sesguen el fragmento del archivo que se verifica en este bucle.fuente