linux - 如何在无限循环中执行一次命令
问题描述
有一个代码思路:
while true; do
*check variable*
if [ variable == true ]; then
*command1 to execute*
.
.
.
*commandN to execute*
fi
done
如何在不离开此循环的情况下只执行一次command1 ?显然,command1每次变量为真时应该只执行一次?
编辑:我不想离开循环,因为它是无头 debian 家庭服务器/存储设备监控脚本的一部分。检查变量是检查 VPN 连接是否打开。或者,如果文件夹中有新文件。或者,如果有新用户登录。触发器可能是无数的。Command1 正在发送有关它的电子邮件通知。或向自定义日志文件写入新行。再次,无数的应用程序。我不想每次迭代都被邮寄。这一切都是关于无休止地检查状态并在状态改变后执行命令。
解决方案
有一个更接近现实生活的例子:我想持续监控音频输出。如果音频接收器未设置为 HDMI,我希望每 10 秒看到一次永无止境的屏幕提醒,但仅在发生时邮寄一次。
所以:
while true
do
if ! pacmd -list-sinks | grep -q "active port: <hdmi-output-0>"; then AUDIO_HDMI="false"; fi
if [ "$AUDIO_HDMI" == "false" ]; then
MSG="Audio sink is not set to HDMI!"
notify-send $MSG
echo "$MSG" | mail -s "WARNING" me@somwhere.com # <-PART OF CODE TO BE EXECUTED ONCE
fi
sleep 10
done
任何想法如何只发送一次电子邮件?
也许还有另一种方法可以找到解决方案而不是无限循环?
推荐阅读
- ruby - .find_all 查找用户输入是否匹配任何值(写入数组)
- ios - Flutter: How to fix ITMS-90809: Deprecated API Usage - Apple 将停止接受使用 UIWebView API 的应用程序提交
- c# - 删除 EPPlus 散点图上的轴标记
- latex - 这是什么围兜?谁能指出?
- python - 多个类之间的异步
- unix - Unix 性能改进 - 可能正在使用 AWK
- c# - 添加或修改列表值
- android - Onclick 有延迟
- javascript - 我如何使用 vanilla JS 创建引导进度条,如果不是 vanilla 的话
- php - 如何滚动 PHP-Postgres SELECT FROM 查询的结果?