显然,MacOsping
有一个-o
选项,意思是“一旦收到第一个成功的响应就返回”或类似的东西。请参阅:https ://stackoverflow.com/a/6119327/4561887 。
Linux Ubuntu上是否有等价物?我们怎样才能最好地达到同样的结果?
我的版本ping utility, iputils-s20161105
是ping -V
.
更新:我在这里找到了 MacOs 文档:https ://ss64.com/osx/ping.html
-o Exit successfully after receiving one reply packet.
可以有各种变通方法来尝试使
ping
行为像 Mac 一样ping -o
,但是有一个命令fping
可以做到这一点,并且旨在同时用于脚本和多个目标。从手册:例子:
使用 ping:
c
参数用于计算数据包,所以你只需要1
这就是为什么 -->-c 1
如果您
$?
在使用 ping 后立即使用命令(退出状态)成功,您应该得到0(成功,OK)。否则,您会得到1
或2
来自输入$?
,含义,错误。PING 返回输出:
1 received, 0% packet loss
-->成功echo $?
返回00 received, 100% packet loss
-->失败echo $?
返回1对于无限循环和服务可用时停止,需要在while循环中进行管道
:
-W1
等待 1 秒将其复制到具有名称的文件中
pingo
:
是 Null 命令或无效果,命令什么也不做或退出状态总是成功,在这种情况下,类似于键入 true。是 内置的 Bourne Shell$1
ping地址],例如pingo $1
->在这种情况下是一个数字地址。pingo 192.168.1.68
这意味着 --> 创建一个具有 name 的文件夹
bin
,在该文件夹中创建一个具有 name 的文件pingo
并允许将文件作为程序执行/home/user/bin
文件夹是您自己的程序的默认文件夹,无论您是什么,都可以在终端中执行,就像 ping就是这样,现在您可以
pingo
使用任何地址运行,就像ping -o
.来自 PING 手册:
这使得可以使用退出代码来查看主机是否处于活动状态。
在我自己的研究以及在这里查看其他两个答案之后,我得出结论:Linux 上没有与
ping -o
MacOS 上存在的命令等效的命令。两者都ping -c 1
没有fping
相同的行为。您可以做的最好的事情是通过使用fping
orping
在循环中模拟其行为,一旦这些函数的返回码为 ,则返回0
,表示 ping 成功。正如我在这里发表的评论:
因此,利用@AlexPixel 的出色工作,这就是我的答案。此表单捕获Ctrl+ Ckill 信号以允许您强制退出无限
while
循环,它确保您在运行时输入 IP 地址参数,并在 IP 地址激活时打印尝试计数和消息。ping_loop.sh:
使用
chmod +x ping_loop.sh
. 像这样“安装”它:~/bin
以便您可以从任何地方运行它:ping_loop
orgs_ping_loop
命令。这假设~/bin
在您的PATH
. 如果使用 Ubuntu 并且这是第一次创建~/bin
,您可能需要注销并重新登录~/.profile
以使文件生效,因为它会自动将该目录添加到您的路径中。测试它:
现在,您可以在此处阅读其他答案,以了解如何强制将该 IP 地址上下移动以进行
ping
测试:如何在特定 IP 地址创建以太网接口,我可以 ping 并强制有时回复,有时不回复?.一种方法是:
样本输出。我从通过上面的命令阻塞的流量开始,然后用上面的另一个命令解除阻塞以使
ping
通过并允许脚本结束。你可以看到最后的== DEVICE AT IP '10.0.0.1' IS ALIVE! ==
打印。这是我的eRCaGuy_dotfiles 存储库中 ping_loop.sh的最终形式:https ://github.com/ElectricRCAaircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/ping_loop.sh此代码的最新版本!
也可以看看:
ping_loop
上面的脚本:如何在特定的 IP 地址创建以太网接口,我可以 ping 并强制有时回复,有时不回复?