Bu, videoları izlerken ekranın kararmasını önlemek için bir "fare hareketi" kullanacak bir senaryo yapma girişimim. En yüksek CPU% işleminin değerini kullanmayı umuyorum top
ve CPU kullanımı% 5'i aşarsa, bir fare hareketi gerçekleşmelidir.
#!/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
Ne yazık ki, çalışmıyor. Hatalar şöyle:
[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 ")
Bunu nasıl düzeltirim? (Lütfen komut dosyalarında deneyimli olmadığımı unutmayın.)
Buradaki cevaplara dayanarak bir araya getirdim:
#!/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
Sonra, Ubuntu Forumlarında bu kodu bildirdim ve Vaphell üzerinde daha fazla çalıştı. Aşağıda Vaphell sürümü ve ne kullanıyorum:
#!/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
Raphael tarafından önerilen şekilde kullanarak sona erdi .
-gt
kayan nokta değil, tamsayı işlenenleri bekler. kullandığınız niçin ve emin değilim((
...))
yerine sadece daha[
...]
. veya neden% CPU'yu tetikleyici olarak kullanıyorsunuz ... ya da neden CPU% kullanımını neden böyle bir şey yerine bir curses programındanps -heo %C --sort -%cpu | head -1