相當於 Linux 上的 ping -o
顯然,MacOs
ping
有一個-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
可以做到這一點,並且旨在同時用於腳本和多個目標。從手冊:$$ … $$ 在預設模式下,如果目標回复,則將其記錄並從目標列表中刪除以進行檢查;如果目標在特定時間限制和/或重試限制內沒有響應,則將其指定為不可達。
$$ … $$
例子:
$ time fping example.com example.com is alive real 0m0.074s user 0m0.000s sys 0m0.004s $ echo $? 0 $ fping 192.0.2.3 127.0.0.1 ICMP Host Unreachable from 203.0.113.1 for ICMP Echo sent to 192.0.2.3 127.0.0.1 is alive ICMP Host Unreachable from 203.0.113.1 for ICMP Echo sent to 192.0.2.3 ICMP Host Unreachable from 203.0.113.1 for ICMP Echo sent to 192.0.2.3 192.0.2.3 is unreachable $ echo $? 1 $ fping -q 192.0.2.3 $ echo $? 1
使用 ping:
ping -c 1 ping_address ping -c 1 192.168.1.68 #example
c
參數用於計算數據包,所以你只需要1
這就是為什麼 –>-c 1
- 如果您
$?
在使用 ping 後立即使用命令(退出狀態)成功,您應該得到0(成功,OK)。否則,您會得到1
或2
來自輸入$?
,含義,錯誤。PING 返回輸出:
1 received, 0% packet loss
–>成功echo $?
返回0
0 received, 100% packet loss
–>失敗echo $?
返回1對於無限循環和服務可用時停止,需要在while循環中進行管道
while ! ping -c1 -W1 192.168.1.68; :;done
- while NOT alive 繼續循環並始終以退出狀態成功退出
:
-W1
等待 1 秒將其複製到具有名稱的文件中
pingo
#!/usr/bin/bash while ! ping -c1 -W1 "$1"; do : && echo "NOT ALIVE" done
:
是 Null 命令或無效果,命令什麼也不做或退出狀態總是成功,在這種情況下,類似於鍵入 true。是 內置的 Bourne Shell- 手段
$1
論點$$ ping address in this case $$, examplepingo $1
-> 在這種情況下是一個數字地址。pingo 192.168.1.68
這意味著 –> 創建一個具有 name 的文件夾
bin
,在該文件夾中創建一個具有 name 的文件pingo
並允許將文件作為程序執行mkdir ~/bin # make directory at /home/user/bin cd ~/bin # change to /home/user/bin directory touch pingo # create file pingo copy the above command and save it chmod +x pingo # give permission to execute
- 該
/home/user/bin
文件夾是您自己的程序的預設文件夾,無論您是什麼,都可以在終端中執行,就像 ping就是這樣,現在您可以
pingo
使用任何地址執行,就像ping -o
.來自 PING 手冊:
如果 ping 根本沒有 收到 任何回複數據包,它將以程式碼 1退出。
如果同時指定了數據包計數和截止日期,並且在截止日期到達時收到的數據包少於計數,它也會以程式碼 1退出。在其他錯誤中,它以****程式碼 2退出。範例:
- 計數 1 並等待 2 秒,但在第 2 秒沒有到達,然後退出並出現錯誤
否則,它以程式碼 0退出。$$ OK $$
這使得可以使用**退出程式碼**來查看主機是否處於活動**狀態。