Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
#!/bin/bash battery_level='cat /sys/class/power_supply/BAT0/capacity' if [ $battery_level -le 10 ]; then sudo bash -c 'echo mem > /sys/power/state' fi
chce stworzyc taki skrypt i dodac go do crona aby sprawdzal powiedzmy co 5 minut i jak poziom baterii spadnie to... wiadomo o co chodzi
ale przy odpaleniu dostaje
./checkbat.sh ./checkbat.sh: line 3: [: too many arguments
po edycji
#!/bin/bash battery_level='acpi -b | cut -d ' ' -f4 | grep -o '[0-9]*' | head -n 1' critical_threshold=10 if [ $battery_level -lt $critical_treshold ]; then sudo bash -c 'echo mem > /sys/power/state' fi
skrypt sie odpala bez bledow ale operator (warunek) -lt nie dziala porostu system usypia.
Ostatnio edytowany przez pink (2016-05-19 17:36:22)
Offline
Czy w linijce:
battery_level='cat /sys/class/power_supply/BAT0/capacity'
zamiast:
'
nie powinno być:
`
?
Offline
Generalnie tak, ale ja próbowałem coś innego wyskrobać i u mnie wynik polecenia traktowane jest jak polecenie, ale to raczej problem z pętlą (bo pomyślałem, żeby obyć się bez crona):
#!/bin/bash for ((i=1; i = i; i++)); do if `cat /sys/class/power_supply/BAT0/capacity` -lt 5; then sudo bash -c 'echo mem > /sys/power/state'; fi done
Ostatnio edytowany przez Pavlo950 (2016-05-19 20:37:54)
Offline
./checkbat.sh: line 5: 64: command not found
64 to poziom baterii w chwili wywolania skryptu
Ostatnio edytowany przez pink (2016-05-19 21:04:18)
Offline
3021
Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:41:01)
Offline
1. A więc pink i Pavlo950 to ta sama osoba?
Pavlo950 napisał(-a):
Generalnie tak, ale ja próbowałem coś innego wyskrobać i u mnie wynik polecenia traktowane jest jak polecenie, ale to raczej problem z pętlą (bo pomyślałem, żeby obyć się bez crona):
Kod:
#!/bin/bash for ((i=1; i = i; i++)); do if `cat /sys/class/power_supply/BAT0/capacity` -lt 5; then sudo bash -c 'echo mem > /sys/power/state'; fi done
To jest zupełnie źle. Niepotrzebna zmienna "i" oraz brak nawiasów kwadratowych dookoła warunku w ifie. W tej postaci najpierw jest uruchamiany ten "cat /sys/..." a potem wynik jest traktowany jako polecenie, którego kod wyjścia sprawdza if. Prawidłowo powinno być coś na kształt:
#!/bin/bash critical=10 while true; do if [ "$(cat /sys/class/power_supply/BAT0/capacity)" -lt "$critical" ]; then sudo bash -c 'echo mem > /sys/power/state' fi done
Offline
3024
Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:41:05)
Offline
seler napisał(-a):
1. A więc pink i Pavlo950 to ta sama osoba?
(...)
To jest zupełnie źle. Niepotrzebna zmienna "i" oraz brak nawiasów kwadratowych dookoła warunku w ifie. W tej postaci najpierw jest uruchamiany ten "cat /sys/..." a potem wynik jest traktowany jako polecenie, którego kod wyjścia sprawdza if. Prawidłowo powinno być coś na kształt:Kod:
#!/bin/bash critical=10 while true; do if [ "$(cat /sys/class/power_supply/BAT0/capacity)" -lt "$critical" ]; then sudo bash -c 'echo mem > /sys/power/state' fi done
#!/bin/bash for ((i=1; i = i; i++)); do if [ "$(cat /sys/class/power_supply/BAT0/capacity)" -lt 5 ]; then sudo bash -c 'echo mem > /sys/power/state'; fi done
Też działa. Bez zmiennej "krytycznej", ale ze zmienną i. Osobiście, pokusiłbym się o coś takiego:
#!/bin/bash while true; do if [ "$(cat /sys/class/power_supply/BAT0/capacity)" -lt 5 ]; then sudo bash -c 'echo mem > /sys/power/state' fi done
Zmienna "krytyczna" według mnie jest niepotrzebna - bo i do czego? To tylko kilka drobnych, zbędnych znaków w pamięci :D
Offline
pogodzilem sie na razie z pm-suspend ale szukam takiego rozwiazania bo pm-suspend jest w konflikcie z
wacom-wireless, o czym juz pisalem wczesniej w jakims watku,
mianowicie uruchomienie tabletu automatycznie usypia system
zahaszowanie tego wpisu
cat /etc/udev/rules.d/99-lowbat.rules # Suspend the system when battery level drops to 7% or lower SUBSYSTEM=="power_supply", ATTR{status}=="Discharging", ATTR{capacity}=="[0-7]", RUN+="/usr/sbin/pm-suspend"
rozwiazuje problem z wacom-wreless ale wtedy usypianie przy niskim stanie baterii nie dziala wiec chce to jakos obejsc ztad caly pomysl ze skryptem
Pavlo
twoj skrypt dziala ale ze to petla to obciaza procek i to bardzo, sparwdz sam
dlatego rozwiazanie z cronem moze byc lepsze
Ostatnio edytowany przez pink (2016-05-21 21:25:33)
Offline
pink napisał(-a):
Pavlo
twoj skrypt dziala ale ze to petla to obciaza procek i to bardzo, sparwdz sam
Ja wiem że pętla, możesz dodać np sleep 10 i obejść się bez crona
Ostatnio edytowany przez Pavlo950 (2016-05-21 21:59:38)
Offline
3026
Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:41:08)
Offline
cat /sbin/checkbat.sh #!/bin/bash if [ "$(cat /sys/class/power_supply/BAT0/capacity)" -lt 10 ]; then sudo bash -c 'echo mem > /sys/power/state' fi
co 3 minuty do crontaba i dziala a te 3 minuty pozwalaja doladowac baterie do 10%
teraz moge sie pozbyc pm-utils i zobaczyc co z wacom-wireless
dizeki za pomoc
sorry, Putterfish ale wole rozwiązanie które sam rozumie
ps. teraz bym chcial dodac warunek ze jak
cat /sys/class/power_supply/BAT0/status Charging
to system sie nie usypia albo system sie usypia tylko w przypadku status discharging.
Ostatnio edytowany przez pink (2016-05-21 23:55:59)
Offline
3027
Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:41:09)
Offline
3029
Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:41:11)
Offline
Strony: 1