bash&conky vs. Vesso-Bel
Mar. 11th, 2012 07:36 pmНамедни взялся за дело, которое уже висело в 2do больше года: написал утилиту для сбора статистики использованного трафика от своего Интернет-провайдера (Vesso-Bel). Статистика отдаётся безо всяких авторизаций, но только для ip, принадлежащих провайдеру.
Спасибо, thephilosoft, BrainFucker, lennier-Raiden и все-все-все! =)
Сначала планировал сделать демона на python, но на волне быдлокодинга на баше решил использовать его и не заморачиваться с демонами. Мой сумрачный гений сначала упёрся в wget и написал скрипт с его использованием, но потом я стал искать опции для запиливания его в conky и внезапно открыл для себя cURL — свободную служебную программу командной строки для копирования файлов по различным протоколам с синтаксисом URL. В итоге была написана новая версия без велосипедов с загаживанием /tmp.
Обе версии принимают в качестве аргумента логин и/или параметр --help. В зависимости от исходных данных отдаётся справочная информация, сообщение о неверном логине или статистика в формате Использовано(МБайт) / Осталось (МБайт) | Всего (ГБайт). Если вдруг кто-нибудь захочет его использовать и/или внести пожелания,— милости просим.
Пробежимся по тексту и рассмотрим нюансы. Текстовую строку можно нужно разбивать слешем и началом новой строки (нажатием энтера). Вместо выравнивания пробелами, можно использовать табуляцию . При сравнении аргументы желательно оборачивать в двойные кавычки "". После [ и перед ] пробелы обязательны. При выводе и присваивании значения переменной тоже желательно оборачивать её или содержимое в двойные кавычки. grep -o отображает только то (а не строку, содержащую это), что подпадает под аргумент (например, равно аргументу или удовлетворяет шаблону). $@ соответствует списку параметров запуска скрипта, разделённых пробелами. Из-за политики zsh в отношении разделителей в зет-шелле по умолчанию этот скрипт работать не будет. Нужно разрешить пробелы в качестве разделителя или убрать справку.
Осталось запилить это дело в conky. Поскольку забирать статистику каждые две секунды (такая у меня частота обновления информации) я считаю как минимум странным, стал вопрос в поиске возможности другого интервала обновления для отдельных команд. Таких оказалось целых три: execi, texeci и execpi. Насколько я понял, третья проделывается каждый стандартный интервал обновления, но новый результат отображается только по прошествии заданного промежутка; вторая является вариантом первой, команда обрабатывается в отдельном потоке (для тяжёлых скриптов); а первая является именно тем, что мне нужно. На том и порешил: