インターネット接続が失われるタイミングを監視する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
編集する
- 私は
bash
whileループを書いた。たぶんこれをシェルプログラムに適用する必要があります(私は長い間Mac OS Xを使用していました)。 - ループがCPUを使いすぎるのを防ぐために、いくつかの一時停止(1秒)を追加しました。