xargsがtail -fで動作しないのはなぜですか?

xargsがtail -fで動作しないのはなぜですか?

tail -f /var/log/syslog | grep「arpwatch」モードを持ち、jabberを介して各行を独自に送信したいと思います。 xargsの使用xmpp [email protected]

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

動作しません。

しかし、tail /var/log/syslog | grep arpwatch | sendxmpp [email protected]

良い結果。

私はこれが私が理解していないいくつかの基本的なxargs問題だと思いますtail -f

ベストアンサー1

xargs command1回の呼び出しでできるだけ多くの入力項目(行、単語)を収集してみてください。注文するで、データ入力にかかる時間は特に気にしません。tailプロセスが終了するか、バッファxargsがいっぱいになると実行されます。注文するそして当時受け取った買収。ただし、tail -f通常はそれ自体は実行されず、コマンドライン引数が非常に制限されている可能性があるため、まったく機能しないようです。

xargs -n1一度に1つの入力のみを渡すことができます。注文するただし、xargsスペースを使用すると入力が項目に分割されるため、入力行を使用するとコマンドがfoo bar2回実行されます。

GNU xargsを使用すると、xargs -n1 -d '\n'必要な操作を実行できます。注文する入力行ごとに1回、行全体が単一の引数として渡されます。

andを使用または使用せずに試して、-d出力-nタイミングを確認してください。

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

xargs -L 1それも機能しますが、行全体を単一の引数として渡すのではなく、行を別々の引数に分割します。

おすすめ記事