Терминал живет и здравствует

Dec 29, 2016 19:43


Графический интерфейс пользователя - это хорошо, но в том же графическом интерфейсе можно эмулировать терминал. Весьма быструю альтернативу многокнопочной херне. В репозиториях Linux-дистрибутивов есть множество программ для быстрого доступа к tty. Пусть это будет tilda. Можно использовать прозрачность, а вызов терминала сделать моментально клавишей F1 (и так же спрятать).




Вызывается скрипт командой b. Просто b. Эта команда печатает 10 последних строк из файла журнала. Мы видим, что оболочка не может найти никакого журнала. Это и понятно, ведь мы же еще ничего туда не записали. Давайте запишем. Запишем наш текст прямо в командную строку, и нажмем Enter.

Теперь другое дело. Проставлена дата и время. Еще сделаем несколько записей. Вроде бы бесполезная херня на постном масле? Но не спешите с выводами.

Иногда бывает полезным не просто "бросить строчку", по выражению битлов (как там? send me a post card, drop me a line), а написать побольше. Для этого у команды b есть ключи. С ключом -n мы можем писать столько строк, сколько захотим. Когда закончим, пошлем в поток управляющий символ EOF (конец файла). Говоря конкретнее, просто нажмем Ctrl-D.

Посмотрим, что получилось. К тексту заметок временной штамп не прикладывается. Ну и ладно.

А теперь поиск. Для этого есть ключ -s. Допустим, мы желаем найти слово "запись". Укажем его после ключа и тут же увидим все записи с его вхождением. Это, конечно, не впечатляет, ко когда таких записей будет под сотню, вы это оцените.

Скрипт b всегда может показать справку по своим ключам. Для этого достаточно запомнить всего один ключ -h:



Поиск, кстати, можно сделать регистронезависимым, если использовать вместе с ключом -s еще и ключ -i. На второй картинке это видно.

В скрипт b, написанный на языке оболочки, можно "интегрировать" другой, написанный на perl. (Как раз ему посвящался предыдущий пост.) Журнал может выполнять функции напоминаний. Например, с ключом -t можно указать число минут, через которые произойдет напоминание (о звонке, о чем угодно). Разумеется, это потребует установки предыдущего скрипта (скрипта timer.pl из предыдущего поста). Немного отвлечемся от темы и посмотрим, какие заплаты там потребуется сделать, это совсем просто и быстро:







Приношу извинения за лишние картинки, но лучше один раз увидеть, чем сто раз ... наступить.

Назад к b. Оболочка по-своему понимает вводимые строки и некоторые символы интерпретируются особым образом. Их надо экранировать. Например, если мы хотим ввести скобку, то смотрим следующий скрин.



Мы либо ставим слеш перед каждой скобкой, либо берем строку со скобками в одиночные или двойные кавычки. Ниже увидим, как это выглядит.

Календарик можно вызвать ключом -c. Заодно показывается локальное время. Тоже иногда удобно. Ну и теперь видно, что скобки видны без всяких слешей и кавычек. Незначительное неудобство на фоне больших преимуществ командной строки. Конечно, контекст блока rem:/end: здесь совершенно другой, он предназначен совсем другому читателю. Но все равно, пусть будет в журнале, ведь на то и журнал, чтобы помнить все.

Давайте добавим еще и будильник. Это разновидность таймера. Мы знаем, что таймер может быть запущен на манер секундомера (предыдущий случай), и на манер будильника. Чтобы указать будильник, достаточно использовать ключ -r и указать время, в которое он должен сработать (а не интервал).



Еще немного о поиске. Скрипт b сам ничего не ищет, он вызывает для этого grep. А утилита UNIX grep имеет много полезных ключей. Например, мы хотим найти все будильники и напоминания. Очевидно, что с ключом -s этого у нас не получится - мы просто найдем все строки с rem: и пипец. Нам надо найти еще и следующую строчку, например, всего одну. Для этого мы используем дополнительный ключ -A1:



Наконец, последнее. Мы можем архивировать журнал. По умолчанию, журнал пишется в скрытый файл .b.log в домашнем каталоге. Это файл архивируется в архив b.log.gz и уже виден в домашнем каталоге в любом файловом менеджере. Наконец, журнал может быть просто удален (и тут же можно начинать писать новый). Для этого у нас есть, соответственно, ключи -a (архивировать) и -d (удалить).

Разумеется, всегда можно просто просмореть журнал вдоль и поперек, например, использу утилиту less, или просто отредактировать его, скажем, редактором vim. Для всего этого еть ключи. См. справку (b -h).

Теперь сам код:



Больших "премудростев" здесь нет. Мы используем переключатель case/esac и анализируем аргументы командной строки. Тут же вызываются дополнительные утилиты и ввод перенаправляется в них. Дополнительно мы используем функцию tc для расчета времени срабатывания таймера: получаем текущее время в формате числа секунд с 1 января 1970 года (благословенные времена! и трава была зеленее, и т.д. и т.п...). Затем интервал пересчитываем в секунды, прибавляем, и снова конвертируем в текущее время в прежнем формате.

Вот и все. С Новым Годом!

Дальше

журналы, заметки, пометки, логи

Previous post Next post
Up