Bash 可访问互联网时的通知脚本

Bash script for notification when internet is accessible

我编写了这个 bash 脚本,以便在可以访问互联网时收到通知,但我不了解正在发生的许多事情。这是脚本:

while ! ping 8.8.8.8 -c 1 2&> /dev/null ; do true; done;

预期的行为是在 ping 成功时结束此循环,并且终端仿真器会自动向我发送通知。


问题


问题

  1. 我的命令有什么问题?
  2. 终端仿真器对 ctrl + C 的反应究竟如何?
  3. 为什么删除 2&> /dev/null 会起作用?

请注意,我已经有了转机。不过还是想多了解一下bash

f() { while ! ping 8.8.8.8 -c 1 ; do true; done; }; f 2&> /dev/null

正确的重定向运算符是 &>,而不是 2&>。 2 被解析为 ping 的单独参数,并且由于 ping 2 永远不会成功,因此循环永远不存在。

我通常在那种循环中做的事情是添加一个 sleep 命令而不是 true:

while ! ping 8.8.8.8 -c 1 &> /dev/null ; do sleep 1; done;

这样你就可以在睡眠中使用Ctrl+C并取消整个循环。

我认为更好的方法是在 ping 中设置超时。

while ! ping -c 1 -W 2 8.8.8.8 >/dev/null 2>&1 ; do sleep 1 ; done