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つの入力項目のみを渡すように使用することもできますが、空白を使用して入力を項目に分割するという事実に見舞われるため、の入力行によってコマンドが2回実行されます。xargs
foo bar
GNU xargsを使用すると、xargs -n1 -d '\n'
必要な処理を実行する必要があります。入力行ごとにコマンドを1回実行し、行全体を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
も機能しますが、行全体を1つの引数として渡すのではなく、行を分割して引数を分離します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加