ping コマンドの各出力行の後にコマンドを実行します。

ping コマンドの各出力行の後にコマンドを実行します。

インターネット接続が失われるタイミングを監視する1行のコマンドを作成しようとしています。

ping www.google.com無期限に実行する場合(毎秒1つのping)、「timeout」という単語が出力行にある場合は別のコマンドが実行されますが、そのpingコマンドは無期限に実行され続けたいと思います。

この命令をOS Xで実行していて他の命令もですがsay fail、端末ウィンドウを見ないと問題があるという音が聞こえます。

1行のコマンドが不可能な場合は、bashスクリプトが可能です。

私はこれを試しました:

ping www.google.com | grep timeout ; say fail

ただし、コマンドはsayユーザーが手動で終了した場合pingにのみ実行されます。

それからこれを試しました。

if ping www.google.com | grep timeout ; then say fail ; fi

しかし、これはsayコマンドを実行しません。

ベストアンサー1

問題は決して終了しないpingコマンドで発生します。

ping一度テストする必要があるループを作成する必要があります-c 1

while [ true ] ; do if ping -c 1 www.google.com | grep timeout ; then say fail ; fi ; sleep 1 ; done

編集する

  • 私はbashwhileループを書いた。たぶんこれをシェルプログラムに適用する必要があります(私は長い間Mac OS Xを使用していました)。
  • ループがCPUを使いすぎるのを防ぐために、いくつかの一時停止(1秒)を追加しました。

おすすめ記事