GNU/Linux >> Linux の 問題 >  >> Linux

XargsがTail-fで機能しないのはなぜですか?

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つの引数として渡すのではなく、行を分割して引数を分離します。


Linux
  1. 1つのSudoで一連のコマンドを実行しますか?

  2. 一部のコマンドでBashプロセス置換が機能しないのはなぜですか?

  3. Wcで各行の文字を数えますか?

  1. DebugfsのLsdelが機能しないのはなぜですか?

  2. BashスクリプトでCdを使用できないのはなぜですか?

  3. LinuxでZIPファイルを操作する

  1. xtermを使い続ける理由

  2. Ansibleで仕事中のスリルを一新

  3. Bashスクリプトで1行ずつ読む