GNU/Linux >> Belajar Linux >  >> Linux

Mengapa Xargs Tidak Dapat Bekerja Dengan Tail -f?

Saya ingin tail -f /var/log/syslog | grep dengan pola “arpwatch” dan mengirim setiap baris ke diri saya sendiri melalui jabber:xmpp [email protected] menggunakan xargs

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

tidak bekerja.

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

bekerja dengan baik.

Saya pikir ini adalah hal mendasar tentang xargs dan tail -f yang tidak saya mengerti.

Jawaban yang Diterima:

xargs command mencoba mengumpulkan sebanyak mungkin item input (baris, kata) untuk satu pemanggilan perintah , dan itu tidak terlalu peduli dengan waktu input data. Jika tail proses dimatikan, atau xargs s buffer terisi, itu akan menjalankan command dengan argumen yang diterimanya saat itu. Namun, tail -f biasanya tidak selesai dengan sendirinya, dan batas argumen baris perintah bisa besar, jadi sepertinya tidak berfungsi sama sekali.

Anda dapat menggunakan xargs -n1 untuk membuatnya hanya melewati satu item input pada satu waktu ke command , tetapi Anda akan terkejut dengan fakta bahwa xargs menggunakan spasi putih untuk membagi input menjadi item, jadi baris input foo bar akan menyebabkan perintah dijalankan dua kali.

Dengan GNU xargs, xargs -n1 -d '\n' harus melakukan apa yang Anda inginkan:jalankan perintah sekali untuk setiap baris input, dengan baris penuh dilewatkan sebagai argumen tunggal.

Coba, mis. dengan dan tanpa -d dan -n dan catat waktu keluaran:

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

xargs -L 1 juga akan berfungsi, tetapi tetap akan membagi baris menjadi argumen yang terpisah, alih-alih meneruskan seluruh baris sebagai satu argumen.


Linux
  1. Jalankan Baris Perintah Dengan Satu Sudo?

  2. Mengapa Lsdel Di Debugfs Tidak Berfungsi?

  3. Mengapa Saya Tidak Dapat Menggunakan Cd Dalam Skrip Bash??

  1. Mewarnai Keluaran Ekor Dengan Sed?

  2. Tidak Dapat Menemukan File Untuk Ditambal Pada Baris Input 3?

  3. Mengapa Saya Bisa Masuk Dengan Kata Sandi Sebagian??

  1. Mengapa `keluar &` Tidak Berfungsi?

  2. Bekerja dengan Pemulihan Tingkat File

  3. Bekerja dengan file ZIP di Linux