GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué Xargs no puede funcionar con Tail -f?

Quiero tail -f /var/log/syslog | grep con el patrón "arpwatch" y enviarme cada línea a mí mismo a través de jabber:xmpp [email protected] usando xargs

tail -f /var/log/syslog | grep arpwatch | xargs sendxmpp [email protected]

no funciona.

pero tail /var/log/syslog | grep arpwatch | sendxmpp [email protected]

funciona bien.

Creo que es algo fundamental sobre xargs y tail -f que no entiendo.

Respuesta aceptada:

xargs command intenta recopilar tantos elementos de entrada (líneas, palabras) como pueda para una invocación del comando , y no le importa particularmente la sincronización de los datos de entrada. Si la tail el proceso se mata, o xargs el búfer se llena, ejecutará comando con los argumentos que recibió para entonces. Sin embargo, tail -f por lo general, no termina solo y el límite para los argumentos de la línea de comandos puede ser grande, por lo que parece que no funciona en absoluto.

Podrías usar xargs -n1 para que pase solo un elemento de entrada a la vez para comando , pero te sorprenderá el hecho de que xargs usa espacios en blanco para dividir la entrada en elementos, por lo que una línea de entrada de foo bar haría que el comando se ejecutara dos veces.

Con GNU xargs, xargs -n1 -d '\n' deberías hacer lo que quieras:ejecutar comando una vez por cada línea de entrada, pasando la línea completa como único argumento.

Pruebe, p. con y sin -d y -n y tome nota del tiempo de salida:

$ ( echo "123 456"; sleep 1; echo foo; sleep 1; echo doo ) | xargs -d '\n' -n1 printf ':%s\n'

xargs -L 1 también funcionaría, pero aun así dividirá la línea en argumentos separados, en lugar de pasar la línea completa como un solo argumento.


Linux
  1. ¿Por qué Lsdel en Debugfs no funciona?

  2. ¿Por qué no puedo usar Cd en un script Bash?

  3. ¿No puede encontrar el archivo para parchear en la línea de entrada 3?

  4. ¿Por qué puedo iniciar sesión con contraseñas parciales?

  5. ¿Por qué Tomcat funciona con el puerto 8080 pero no con el 80?

Comando de cola de Linux con ejemplos

Renovando mi emoción en el trabajo con Ansible

Cómo trabajar con Ansible Provisioner en Vagrant

Trabajar con recuperación de nivel de archivo

Leer línea por línea en bash script

¿Por qué find -mtime no funciona como se esperaba en archivos con diferentes zonas horarias?