【发布时间】:2016-11-17 07:21:19
【问题描述】:
我想监视一个命令的输出,该命令一直无限运行并时不时地打印一行。它显示一个硬件按钮的事件,每行表示一次按下。
我的脚本应该在接收到行时运行其他命令,但问题是,不是这些行的内容决定必须运行哪个命令,而是给定延迟内的行数。
换句话说,用户可以多次按下这个被监控的按钮,并且根据按下按钮的频率执行不同的命令。用户在两次按下之间有 2 秒的时间,然后将根据连续按下的次数选择命令。
我目前有一个具有这种结构的 Bash 脚本:
#!/bin/bash
lasttouch="0"
MONITORING_COMMAND
| while read line; do
if [ $(date +%s --date="2 seconds ago") -lt $lasttouch ]
then
COMMAND2
else
lasttouch=$(date +%s)
COMMAND1
fi
done
然而,这最多只能处理两次连续按下,并且它在每个事件上执行COMMAND1,即使随后及时按下并且应该运行COMMAND2。
我实际上不知道如何在 Bash 中正确实现这一点。我想我需要某种多线程,一个线程监听传入的行并增加一个计数器,另一个线程在每个事件后运行 2 秒倒计时,并在倒计时超时后重置计数器并执行适当的命令而无需其他事件。
【问题讨论】:
标签: linux multithreading bash