我正在编写一个酒吧脚本,当我知道它暂时不会改变时,我不想每 20/30 秒检查一次 WiFi 的 ssid 和它的状态。我想使用类似 bspc 命令的命令,subscribe report
该命令仅在发生更改时更新。
这是我的上下文:
while :
do
case "con=$(cat /sys/class/net/w*/operstate 2>/dev/null)" in
[Dd]*) ssid='No Connection' ;;
[Uu]*) ssid=$(iwgetid -r) ;;
esac
echo "$ssid"
sleep 30
done
答案1
我可能在解释我希望脚本实际执行的操作方面做得很糟糕,所以这里有一个更好的版本:
我不想每 20/30 秒刷新一次栏只是为了每次显示相同的 ssid,我只想在脚本有不同的输出时刷新它。
我确实完全偶然地找到了解决方案:
# This function checks if the line is actually different or not,
# it's stolen from herbstluftwm example script
uniq_linebuffered() {
awk -W interactive '$0 != l { print ; l=$0 ; fflush(); }' "$@"
}
while :
do
case "con=$(cat /sys/class/net/w*/operstate 2>/dev/null)" in
[Dd]*) ssid='No Connection' ;;
[Uu]*) ssid=$(iwgetid -r) ;;
esac
echo "$ssid"
sleep 10 || break
done > >(uniq_linebuffered) &