WiFiの状態に応じてWiFi ssidを取得する

WiFiの状態に応じてWiFi ssidを取得する

私はバースクリプトを書いており、Wi-Fiのssidとステータスがしばらく変わらないことを知っていても、20/30秒ごとに確認したくありません。subscribe report変更が発生したときにのみ更新するbspcコマンドなどを使用したいと思います。

私の状況は次のとおりです。

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

おそらく、スクリプトが実際にやりたいことを正しく説明していないでしょう。したがって、より良いバージョンは次のとおりです。

毎回同じssidを表示するために20/30秒ごとにバーを更新したくなく、スクリプトの出力が異なるときに更新したいと思います。

私は偶然完全に解決策を見つけました。

# 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) &

関連情報