我希望能够在命令执行成功时中断监视。实际上,我正在寻找与通过 提供的行为相反的行为--errexit
。根据 man:
-e
,--errexit
命令错误时冻结更新,并在按键后退出。
例子
命令:
ping -c 3 www.google.com
由于连接不完整而失败*。我可以通过以下方式重新运行以查看连接何时恢复:
watch -n 1 'ping -c 3 www.google.com'
ping
如果执行没有错误,我想停止观看。
* 我并不是在寻找更好的方法来验证连接。这些ping
例子来自在火车上使用手机连接时手机经常失去信号的情况。
答案1
由于网络连接恢复后您将开始接收 ping,因此在watch
连接断开后启动并在输出更改后告诉其退出:
watch -g -n 1 ping -c 3 www.google.com
一旦您开始接收乒乓球,手表就会退出。
答案2
对于更通用的解决方案,您可以使用以下命令反转命令的退出代码!
:
# Never terminates
watch --errexit echo "test"
# Terminates on first invocation
watch --errexit ! echo "test"
这适用于任何 POSIX shell,特别是 bash 和 zsh。