나는 막대 스크립트를 작성 중이며 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) &