如何使用 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
只检查一次。如何在文件更改时自动终止命令?
这种方法行不通有两个原因:
ping
命令一直运行到中断为止。换句话说:永远只会有一个循环迭代,因为你会被困在循环中。
只要文件存在,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 权限.
我想执行 ping -f
命令直到 cat ~/.test = false
,但是
until [[ `cat ~/.test` == false ]]; do sudo ping -f 10.0.1.1; done
只检查一次。如何在文件更改时自动终止命令?
这种方法行不通有两个原因:
ping
命令一直运行到中断为止。换句话说:永远只会有一个循环迭代,因为你会被困在循环中。
只要文件存在,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 权限.