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

관련 정보