如何使用 ping -f 直到 file = false

How to use ping -f until file = false

我想执行 ping -f 命令直到 cat ~/.test = false,但是

until [[ `cat ~/.test` == false ]]; do sudo ping -f 10.0.1.1; done

只检查一次。如何在文件更改时自动终止命令?

这种方法行不通有两个原因:

  1. ping 命令一直运行到中断为止。换句话说:永远只会有一个循环迭代,因为你会被困在循环中。
  2. 只要文件存在,
  3. cat ~/.test 将始终是 "true"(即成功)。如果文件不存在(不再存在),它只会是 "false"(即以非零错误代码退出)。 cat 适合检查文件更改 - 除非该更改正在创建或删除文件。

考虑到这一点,您或许应该尝试以下方法:

#!/bin/bash

# launch the ping process and leave it running in the background
ping -f 10.0.1.1 &
# get the process ID of the previous command's process
PING_PID=$!
# until the file ~/.test does not exist any more,
# do the stuff in the loop ...
until ! test -f ~/.test; do
  # sleep for one second
  sleep 1
done
# kill the ping process with the previously stored process ID
kill $PING_PID

该脚本未经测试,可能无法完全运行,但它应该能让您了解如何解决您的问题。

编辑: 如果不需要泛洪ping,可以使用这个更简单的脚本:

#!/bin/bash

# As long as the file ~/.test exists,
# send one ping only to the target.
while test -f ~/.test; do
  ping -c 1 10.0.1.1  
done

这种方法是由 twalberg 提出的。

这种方法的另一个优点(除了更简单的脚本之外)是您不再需要 sudo ping 命令,因为与 flood ping 不同,"normal" ping 不需要 root 权限.