вторник, 13 ноября 2012 г.

Стандартные команды cal и ncal из пакета bsdmainutils

Команды cal, ncal в Linux входят в пакет bsdmainutils и позволяют отображать календарь и (как написано в мане) дату Пасхи.По сути cal является ссылкой на программу ncal, но по умолчанию cal выводит календарь с днями по горизонтали и начиная с воскресения, а ncal выводит дни по вертикали и начинает отсчет с понедельника.
Вывод cal в консольВывод ncal в консоль
Особенностью этих команд является вывод даты от первого года н. э. до 9999 года н. э.


Ключи.

В документации говориться что ключи
-N - перевод в режим ncal
- перевод в режим cal
но это не совсем так:
Для того, чтобы вывод команды ncalвыглядел как вывод команды cal нужно воспользоваться дополнительным ключом:
-S - Начинать неделю с Воскресенья.
Теперь очень важный момент: при использовании ключей -S и -C очень важно их поставить именно в таком порядке (ncal -SC), иначе будет выведена ошибка.
-M - Начинать неделю с Понедельника. Но, как ни странно, в одиночку этот ключ не работает с cal, и его нужно использовать с ключом -N. А ncal, как уже говорилось, показывает дни с Понедельника.
-1 - Показывает только текущий месяц (стоит по умолчанию).
-3 - Показывает предыдущий и последующий месяц.
-h - Отключает подсветку сегодняшнего дня.
-y - Показывает все месяцы текущего года.
-j - Показывает календарь с номерами дней в году (первый день - 1 января).
-m номер_месяца - Показывает запрошенный месяц.
Можно после цифры использовать флаг f, что бы показать предыдущий месяц, или флаг p что бы показать последующий месяц. Пример:$ncal -m 4f покажет, в моем случае, апрель 2013 года
$ncal -m 4p покажет апрель 2012 года
$ncal -m 12f покажет декабрь 2012 года
$ncal -m 12p покажет декабрь 2011 года
Ещё замечена такая вещь: -m4p - можно; -m 4p - можно; -m4 p - нельзя; -m 4 p - нельзя.
-A количество_месяцев - Показывает выбранное количество месяце после выбранной даты. Если использовать совместно с -y (показать все месяцы текущего года), то поддерживает отрицательные значения, например : $ncal -y -A2 - выведет календарь текущего года и ещё 2 первых месяцев из следующего;
$ncal -y -A-2 - выведет календарь текущего года без двух последних месяцев.
-B количество_месяцев - Показывает выбранное  количество месяцев до выбранной даты. Если использовать совместно с -y (показать все месяцы текущего года), то поддерживает отрицательные значения, например:
$ncal -y -B2 - выведет текущий год и перед ним 2 последних месяца из прошлого года;
$ncal -y -B-2 - выведет текущий год без двух месяцев в начале года.

Ниже приведены ключи используемые только в ncal.

-J - Показывает Юлианский календарь, в сочетании с ключом 
отображает дату Пасхи по Юлианскому календарю. Эта опция работает только с командой ncal.
-e - Выводит дату Пасхи (для западных Церквей).
-o - Выводил дату Пасхи (для Православной Греческой и Русской церкви)
-w - Показывает номер недели.
-b - Тоже самое, что и -C, только в мануале называется "использовать старый формат"
-d yyyy-mm - Используется для выбора текущей даты при переходе на дату.
-H yyyy-mm-dd - Назначает эту дату текущей. Используется для отладки подсветки.< Последние два ключа тяжело осознать без примера:


Обратите внимание, -d заставляет выбранный  месяц отразиться как текущий, а -H подсвечивает выбранное число. Обе эти функции нужны для отладки скриптов.
-H можно использовать и немного по другому:
В данном случае мы назначаем число 15 апреля будущего года как текущее и просим показать нам в календаре апрель будущего месяца.
-s код_страны - Задает код страны по которой будет переход с Юлианского на Григорианский стиль. Если код_страны не задан, то ncal пытается определить его по локали, и если не может, то берет число когда перешла Британия и её колонии.
ncal принимает два способа присвоения кода_страны, как пример: -sGB и -s 'GB'

Применение.

Самый простой способ использования это просто набрать в строке cal или ncal по вкусу и нажать Enter. Но можно посмотреть для просмотра определённого месяца так: ncal месяц год
В этом случает будет выведен указанный месяц, как пример:
Если часто работать в консоли и нужно периодически смотреть в календарь, то можно сделать алиас:
открываем файл .bashrc:
$nano .bashrc
и в конце дописываем:
alias cal='ncal -b3'
после этого жмем Ctrl+X затем Y и наконец Enter.
перезапускам bash.
После этого при вызове cal у вас будет появляться 3 месяца, один после, один до текущего и будут работать все ключи от команды ncal. Но никто вам не запрещает воспользоваться ключиками и поправить положение, -y будет показывать год, -m будет показывать выбранный месяц... Получается очень удобно.
Ещё, на просторах интернета лежат статьи как использовать эти команды для скриптов, в том числе и на сайте, но это уже тема для другой статьи.