我正在尝试构建一个单行命令来监视我的互联网连接何时下降。
我希望这样,如果我ping www.google.com
无限期地运行(每秒一次 ping),如果输出行中存在“超时”一词,则另一个命令会运行,但该ping
命令会继续无限期地运行。
我在 OS X 上运行这个命令,所以另一个命令是say fail
这样,如果我不看终端窗口,我可以听到有问题。
如果它不能是一行命令,那么 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 循环,也许你应该让它适应你的 shell 程序(我玩 mac os X 已经很长时间了), - 我添加了一些暂停(一秒)以防止循环消耗太多CPU...