Статус аккумулятора в приглашении командной строки
Бывает полезно, работая в командной строке, видеть уровень заряда батареи.
Вот один из способов:
( ОС - ARCH Linux )
#!/bin/zsh # Путь к инфо файлам DIR_STAT='/proc/acpi/battery/BAT0/'; # # Определяем уровень заряда аккумулятора на текущий момент # Было :: remaining_bat=`cat /proc/acpi/battery/BAT0/state | grep remaining | awk {'print $3'}`; # # Определяем подключён сетевой провод или нет # Было :: stat=`cat /proc/acpi/battery/BAT0/state | grep charging | awk {'print $3'}`; # # remaining_bat=$(awk '/remaining/ {print $3}' $DIR_STAT/state); # stat=$(awk '/charging/ {print $3}' $DIR_STAT/state); # # Всё убрал в одну строку (спасибо, ramok :) ) # eval $(awk '/remaining/ {print "remaining_bat="$3} /charging/ {print "stat="$3}' $DIR_STAT/state) # Определяем 100% заряда для аккумулятора # Было :: full_bat=`cat /proc/acpi/battery/BAT0/info | grep full | awk {'print $4'}`; full_bat=$(awk '/full/ {print $4}' $DIR_STAT/info); if [ $stat = 'charging' ]; then stat='+'; # Провод подключён ( ноут зяряжеается ) elif [ $stat = 'charged' ]; then stat=''; # ( Аккумулятор зяряжен) else stat='-'; # Провод не подключён ( ноут разряжается ) fi # получаем заряд батареи в % ( Школьная математика - Рулит! :) ) bat=$(($remaining_bat*100/$full_bat)); # основные цвета ( ESC - последовательности, подробнее - $ man console_codes ) RED="\033[31m"; # Красный YELLOW="\033[33m"; # Жёлтый WHITE="\033[38m"; # Белый # Цвет по-умолчанию DEFAULT="\033[0m"; if [ $bat -lt 10 ]; then # Если заряд аккамулятора меньше 10% (краасные цвет) result="$RED$stat$bat"; elif [ $bat -lt 30 ]; then # Если заряд аккамулятора меньше 30% (жёлтый цвет) result="$YELLOW$stat$bat"; else result="$WHTE$stat$bat"; # Заряд аккамулятора больше 30% ( белый цвет ) fi # Выводим результат echo -e $result%%$DEFAULT; exit 0;
Далее редактируем файл ~/.zshrc в функции precmd() прописываем где-нибудь в начале:
precmd() { BAT=`binf.sh`; PROMPT="battery:(`echo $BAT`)> " .....
Вот такой вот элементарный скрипт. У меня на TERM='linux' возникли проблемы с цветами. Если есть вариант лучше и правильней очень прошу поделиться.
- kc's blog
- 3207 просмотров
Страница для печати

А я бы еще ифы инвертировал от большего к меньшему (чаще то батарея больше 30, зачем лишние 2 раза проверять :)
P.S. и да, это паранойа и "задротство"
никакая ни паранойя. очень даже одобрямс. когда цвет менятся, сразу видно, это вам не циферки Ж:-)
Про elif забыл... спасибо..
Инвертировать не буду.
у меня на ноуте нет /proc/acpi/battery/BAT*, например. Вообще, не нашел где у меня данные о батарейке в /proc
Поэтому, рекомендую пользоваться acpi, как наиболее переносимым решением:
$ acpiBattery 0: Discharging, 95%, 02:35:29 remaining
в /proc может не быть, можно в /sys поискать
А какая ОС ?
кстати еще есть трюк, что бы два раза awk не вызывать для одного и того же файла
Спасибо, ramok. Подправил. Насчёт проверки наличия батареи - идея прикольная, можно будет попробовать как появиться свободная минутка.
супер! ... ты бы знал как мне помог.
у меня есть исторический архив логов в emulate_httpd_log on формате, написал быдлоскрипт который его конвертит в формат для запихивания в sqlite3.
этот "шедевр" выдавал нагора порядка 160 записей в секунду на 1м ядре моего Intel(R) Core(TM)2 Duo CPU E6750 @ 2.66GHz (можно было 2 ядра использовать, но всероавно тупо)
Да, если такое переписать на sed или awk или perl или tclsh/expect, будет порядочно быстрее Ж:-)
В данном конкретном случае больше expect подходит, так как в нем есть замечательная командочка regexp которая умеет разбрасывать то что замачил регесп по переменным. tclsh просто не умеет однострочники. При том что tcl/expect создает байткод на лету => работать должно быстрее.
$ expect -c 'while {[gets stdin l] >= 0} {regexp -- {((\d+\.){3}\d+) .+ .+ \[([^]]+)] "([^"]+)" (\d+) (\d+)} $l -> ip -> time req size res; puts "$ip\t[clock scan $time -format "%d/%b/%Y:%T %Z" -gmt 1]\t$req\t$res\t$size"}' < apache.logТакое можно и на perl сварганить применяя ключик e к s/// для разбрасывания данных по переменным. Только там strtime кривой какой. Не дает строку в другой формат переконвертить, что бы ненадо было разбивать на элементы. Может как нить докавыряю..
PS
Нашел у тебя две бульбы в коде:
1. Не учитывается GMT (если скрипт запустишь на тачке с другим GMT, то скрипт будет не правильно выдавать время). В моем примере это пофикшено
2. CACHE_CODE не определяется, по крайней мере у меня с таким вот форматом апача:
Мой старый скрипт, показывает ресурс батареи
хорошая идея, спасибо. еще вставить проверку наличия батареи. и еще если батарея не одна. и проверку того что батарея не одна, но она не подключена (в этих файлах будет пусто)...
совсем отличо будет Ж:-)
PS
если совсем кошерно, то такие параметры в промпте нужно передавать через %1v и подобные перемные как тут
PPS
эх, надо бы добавить советы с показанием в промпте zsh текущего режима в vi режиме и для predict-on, да руки никак не доходят опубликовать..
вот эти строки:
можно сократить до
такой вызов меньше форкает процессов, а соответственно экономит батарею.
Спасибо.
У мене на робочій станції акумулятора немає, то цей скрипт із тріском вилітає. Так що перевірка помилок — святе діло:
Як доберуся до лаптопа, протестую кольори.
краще робити так
Отправить комментарий