To jest moja próba stworzenia skryptu, który użyje „ruchu myszy”, aby zapobiec wygaszaniu ekranu podczas oglądania filmów. Mam nadzieję, że użyję wartości najwyższego procesora w%, top
a jeśli użycie procesora przekroczy 5%, powinien nastąpić ruch myszy.
#!/usr/bin/env bash
sleep_period=60s
while true; do
if (( $(top -bn 1 | sed -nrs '8p' | awk '{ print $9 }') -gt 5 )); then
while (( $(top -bn 1 | sed -nrs '8p' | awk '{ print $9 }') -gt 5 )); do
xdotool mousemove 0 100
xdotool mousemove 0 50
sleep ${sleep_period}
done
else
sleep ${sleep_period}
fi
done
Niestety nie działa. Błędy są następujące:
[07:20 PM] /bin $ noo.sh
/home/vasa1/bin/noo.sh: line 6: ((: 0.0 -gt 5 : syntax error: invalid arithmetic operator (error token is ".0 -gt 5 ")
/home/vasa1/bin/noo.sh: line 6: ((: 6.4 -gt 5 : syntax error: invalid arithmetic operator (error token is ".4 -gt 5 ")
Jak to naprawić? (Uwaga: nie mam doświadczenia w pisaniu skryptów).
Na podstawie odpowiedzi tutaj zestawiłem:
#!/usr/bin/env bash
sleep_period=5m
while true; do
if [[ $(top -bn 1 | sed -nrs '8p' | awk '{ print int($9) }') -gt 8 ]]; then
while [[ $(top -bn 1 | sed -nrs '8p' | awk '{ print int($9) }') -gt 8 ]]; do
xset -dpms; xset s off
xset +dpms; xset s on
sleep ${sleep_period}
done
else
sleep ${sleep_period}
fi
done
Następnie zgłosiłem ten kod na forach Ubuntu i Vaphell dalej nad nim pracował. Poniżej znajduje się wersja Vaphell i używam jej:
#!/usr/bin/env bash
sleep_period=5m
while true; do
if top -bn 1 | awk 'NR==8 { exit !($9>8); }'; then
xset -dpms; xset s off
xset +dpms; xset s on
fi
sleep ${sleep_period}
done
xset
jak sugeruje Raphael poniżej.
-gt
oczekuje operandów całkowitoliczbowych, a nie zmiennoprzecinkowych. I nie jestem pewien, dlaczego używasz((
...))
a nie tylko[
...]
. lub dlaczego używasz CPU% jako wyzwalacza ... lub nawet dlaczego wyodrębniasz wykorzystanie CPU% z programu przekleństw, takiego jak top, a nie coś w stylups -heo %C --sort -%cpu | head -1