GNU/Linux >> Linux Esercitazione >  >> Linux

Perché Xargs non può funzionare con Tail -f?

Voglio tail -f /var/log/syslog | grep it con pattern "arpwatch" e invio ogni riga a me stesso tramite jabber:xmpp [email protected] usando xargs

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

non funziona.

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

funziona bene.

Penso che sia qualcosa di fondamentale su xargs e tail -f che non capisco.

Risposta accettata:

xargs command cerca di raccogliere quanti più elementi di input (righe, parole) possibile in una chiamata del comando , e non si preoccupa particolarmente della tempistica dei dati di input. Se la tail il processo viene terminato o xargs Se il buffer viene riempito, eseguirà comando con le argomentazioni ricevute fino a quel momento. Tuttavia, tail -f di solito non finisce da solo e il limite per gli argomenti della riga di comando può essere grande, quindi sembra che non funzioni affatto.

Potresti usare xargs -n1 per fare in modo che passi solo un elemento di input alla volta per comandare , ma rimarrai colpito dal fatto che xargs usa gli spazi bianchi per dividere l'input in elementi, quindi una riga di input di foo bar comporterebbe l'esecuzione del comando due volte.

Con GNU xargs, xargs -n1 -d '\n' dovrebbe fare quello che vuoi:esegui comando una volta per ogni riga di input, con l'intera riga passata come argomento singolo.

Prova, ad es. con e senza -d e -n e prendi nota dei tempi di uscita:

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

xargs -L 1 funzionerebbe anche, ma dividerà comunque la riga in argomenti separati, invece di passare l'intera riga come un argomento.


Linux
  1. Eseguire una linea di comandi con un sudo?

  2. Perché la sostituzione del processo Bash non funziona con alcuni comandi?

  3. Contando i caratteri di ogni riga con Wc?

  4. Perché Lsdel in Debugfs non funziona?

  5. Perché non posso usare Cd in uno script Bash??

Comando Tail Linux con esempi

Come lavorare con Ansible Provisioner in Vagrant

Lavora con Recupero a livello di file

Lavora con i file ZIP in Linux

Perché Tomcat funziona con la porta 8080 ma non con la 80?

Perché find -mtime non funziona come previsto su file con fusi orari diversi?