tail -f /var/log/syslog | grep
パターン「arpwatch」を使用して、すべての行をjabber経由で自分宛てに送信します:xmpp [email protected]
xargsを使用する
tail -f /var/log/syslog | grep arpwatch | xargs sendxmpp [email protected]
動作しません。
しかし、tail /var/log/syslog | grep arpwatch | sendxmpp [email protected]
うまく機能します。
xargs
の基本的なことだと思います およびtail -f
わかりません。
承認された回答:
xargs command
コマンドの1回の呼び出しに対して、できるだけ多くの入力項目(行、単語)を収集しようとします 、入力データのタイミングは特に気にしません。 tail
の場合 プロセスが強制終了されるか、xargs
sバッファがいっぱいになると、コマンドが実行されます それまでに受け取った引数で。ただし、tail -f
通常、それ自体では終了せず、コマンドライン引数の制限が大きくなる可能性があるため、まったく機能しないようです。
xargs -n1
を使用できます コマンドに一度に1つの入力項目のみを渡すようにする 、しかし、xargs
という事実に見舞われるでしょう 空白を使用して入力をアイテムに分割するため、foo bar
の入力行 コマンドが2回実行されます。
GNU xargsの場合、xargs -n1 -d '\n'
やりたいことを実行する必要があります:コマンドを実行します 入力行ごとに1回、行全体が1つの引数として渡されます。
試してみてください。 -d
がある場合とない場合 および-n
出力タイミングをメモします:
$ ( echo "123 456"; sleep 1; echo foo; sleep 1; echo doo ) | xargs -d '\n' -n1 printf ':%s\n'
xargs -L 1
も機能しますが、行全体を1つの引数として渡すのではなく、行を分割して引数を分離します。