【发布时间】:2016-02-25 16:48:21
【问题描述】:
我编写了这个 bash 脚本,以便在可以访问互联网时发出通知,但我不明白正在发生的许多事情。这是脚本:
while ! ping 8.8.8.8 -c 1 2&> /dev/null ; do true; done;
-
-c 1选项告诉ping我只想发送一个数据包。 -
2&> /dev/null存在是因为我不想看到输出。 -
true存在是因为bash不接受do;语法。 - 终止条件是
! ping ...,因为ping在timeout之前没有收到任何数据包时返回非零状态码。
预期的行为是当ping 成功时此循环结束并且终端仿真器将自动向我发送通知。
问题
- 即使可以访问 Internet,此命令也不会结束。
- 尝试用
ctrl + C终止命令不起作用。我认为它正在杀死子命令ping而不是整个命令。 - 只有删除
2&> /dev/null才能使一切正常,除了将输出写入终端的小问题。
问题
- 我的命令有什么问题?
- 终端仿真器对
ctrl + C的反应究竟如何? - 为什么删除
2&> /dev/null会起作用?
请注意,我已经有了转机。不过我还是想多了解一下bash。
f() { while ! ping 8.8.8.8 -c 1 ; do true; done; }; f 2&> /dev/null
【问题讨论】:
-
我的
ping版本需要ping -c 1 8.8.8.8。 Pluse-uno 用于探索您的问题!祝你好运。
标签: bash shell terminal-emulator