例子

例子

我希望能够在命令执行成功时中断监视。实际上,我正在寻找与通过 提供的行为相反的行为--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。

相关内容