Grep Wvdial実行時の出力

Grep Wvdial実行時の出力

grep実行時に出力が必要です。実際にモデムが接続されたら、タスクを実行したいと思います。wvdialwvdial

grep可能であれば、モデムが接続されていることを意味する文字列「IPアドレス」を使用し、別の操作を実行するために別のシェルスクリプトを起動してこれを実行したいと思います。

それはどのように可能ですか?

ベストアンサー1

厳密に言えば、答えは一つです。

多くのプログラムは、どこかにパイプされると出力をバッファリングします。つまり、一度に複数の行を作成します。これはパフォーマンスを向上させますが、grep出力しようとする試みは当然破壊されます。 GNU Coreutilsにはstdbuf通常、この設定を変更できるユーティリティが含まれています。 stdoutまたはstderrをラインバッファリングに変更したいと思います。これはうまくいくかもしれませんが、最善の解決策ではないかもしれません。

より良い方法:

を見ると、pppdは、PPPリンクが表示されたときにこのスクリプトを実行することを/etc/ppp含む複数のスクリプトがあることを確認できます。/etc/ppp/ip-up少なくともDebianではスクリプトが実行されます/etc/ppp/ip-up.d/

したがって、より簡単な解決策は、/etc/ppp/ip-up.d/シェルスクリプトを追加または編集することです(または存在しない場合は作成する)/etc/ppp/ip-up。同様に…ipv6-up、および変形があります…-down。そしてもう少し確認してみてください。pppdマンページの「スクリプト」セクションもっと学ぶ。

upスクリプトを使用して、リンクが準備されたことをスクリプト(または他のスクリプト)に通知できることに注意してください。そのタスク自体を実行する必要はありません。たとえば、単純な信号を使用して信号を送信し、& をkill -USR1 other-script-pid使用trapしてsleepその信号を待つことができます。あるいは、読み取り用に名前付きパイプ(「fifo」などmkfifo)を開き(作成者があるまでブロックされている)、upスクリプトを使用することもできますecho alive > /path/to/fifo。または、IPアドレスやその他の有用な情報をエコーし​​ます。または、あなたのスクリプトが動作し、kill -STOP $$upスクリプトも動作しますkill -CONT script-pid。これを達成する方法はいくつかあります。 (さらに出て、dbusを使うこともできます.)

おすすめ記事