Прости начини да се правят по-удобно командния ред помощна програма

Основните принципи на написването на удобни конзолни приложения.

Качествена команден ред - голямо среда за работа инча История, avtokomplit, транспортьори, спедиция, широка гама от готови софтуер, способността да копирате и поставите дори най-сложните команда - всичко това прави на CLI мощен и удобен инструмент. Не е изненадващо, че разработчиците са готови да пишат свои скриптове и конзолни програми: автоматизация монтаж и deploya, бази данни тест внедряване, статистика, мониторинг, хитър търсене - причина да не се разглежда.

Въпреки това, "командния ред помощна програма" не означава автоматично, "лесна за използване програма." Жалко име, непълна или няма описание, голям брой позиционни параметри, объркващи именуване ключове - команден ред може да бъде напълнен когнитивно резистентност 1 pohlesche много сложен графичен интерфейс.

Тази статия съдържа някои прости съвети, за да следват, което ще помогне да направите свои конзолни скриптове-лесен за използване.

Отговорности: съвети са доста прости, и ако те ви се струват за даденост - отлично. За съжаление, дори и такива прости неща понякога забравени. На следващо място, аз Ви предлагам да и вашите потребители живеят в UNIX среда, близка: пълен черупка и пълен набор от стандартни програми. Освен това, аз използвам думата "програма", "сценарий" и "полезност", тъй като взаимозаменяеми синоними. И накрая, като примерите, дадени в откъси статията на Perl, но и всички съвети, се прилагат еднакво за скриптове и програми на всеки език за програмиране, както и техниките лесно се превеждат на всички езици.

И аз пиша нов скрипт на всяка цена?

Най-добър сценарий - такъв, който не трябва да пиша. Може би проблемът е решен с обикновено комбинация от съществуващите програми? направи полезност. сортиране. намери. Впиши. lsof. NETSTAT. strace и т.н. не само добри сами по себе си, но също така и перфектно залепени заедно чрез тръбопроводи ( "тръба").

Или може би проблемът е решен кратки Perl лайнери, което е по-лесно да се напише, отколкото да си спомни отново 2. Името на готовия сценария? Между другото, Perl лайнери също е перфектно интегрирани в производството.

добро име

с добро име за една добра програма - Какво е това? Къса или дълга? Анотация или описание на поведението? Една дума или композитен?

Ето няколко прости правила:

по-често се използва програма, толкова повече може да си име, и обратно; сравни често използвани ли и още много други редки ап-да инсталирате;

Колкото по-тесен проблемът е решен чрез скрипт, толкова по-подробна и точна името трябва да бъде; сравни обобщаване-уклончив грим и съвсем конкретна ps2pdf;

Името може да бъде абстрактна и безсмислени, но в никакъв случай не трябва да бъде подвеждаща; сценария за подготовката на освобождаването може да се нарече и да направи освобождаване. и RC1. но не го наричат ​​тест-основните линии. стартиране или нова версия.

именувани параметри

Ако параметрите на сценария са по-сложни, отколкото обикновен списък на файловете (като RM), или един чифт "какво-къде" (както е в ср), «какво-къде" (както е в Впиши) - скрипт, необходими именувани параметри на командния ред.

знамена са налични автоматично отрицание (--cache. --no-кеш),

синоними (и -q --quiet. -h и --help)

опция задължителните стойности (може да бъде определен стойностен тип: низ, число, реално, шестнадесетичен)

umolchalnyh стойности за опции

автоматично пълнене на масиви и хешове,

Лепене къси опции (като Perl -lane. LS-la).

В общи линии, документация за Getopt :: Дълги и практика в прилагането му - струва.

Или едно писмо опция multiletter?

Струва ми се, че почти всяка опция струва като и една буква, и multiletter опции (като -q и --quiet). Една писмо ключове са удобни за интерактивна работа, тъй като те бързо се наемат и multiletter - в Makefile-ове, както и други скриптове, както разбрано по-добре.

Традиционните имена на параметрите

Вие искате на потребителите бързо да си спомните полезност настройки - обадете се привични действия познати имена:

-V. --version - дисплей версия на програмата,

-р. --quiet. --silent - режим с по-малко многословно,

-с. --verbose - режим с по-многословно (интересен пример се намира в SSH -v -vv -vvv осигури по-подробно сеч ...)

-п. --dry управляван - пробен пуск без да се извършват действия, писане

или -n - брой елементи, за да бъдат обработени,

-о. --output - файл за запис на резултатите,

-е. --file - файл с данни за обработка,

-R. --reverse - лечение в обратен ред,

-к. --jobs. --parallel - колко процеси за паралелна обработка на информацията.

Как да се обясни на потребителя, че той не е наред

Ако параметрите подадени на скрипта не преминават проверка и анализ, е необходимо правилно да информира потребителя:

Важно е, че съобщението за грешка беше кратък и ясно се посочва, че това не е така с параметрите. Недопустимо е в отговор на неверни параметри, за да се извлече пълна помощта - това не помогне клиента си да разбере какво се случва.

Нека да видим как те се държат популярните програми:

Тук всичко е кратък и по същество:

кратко съобщение за грешка,

съвет: къде да гледате пълен сертификат

предположение: че в действителност може да се има предвид.

Когато трябва да умре

Ако сценарият за някои вътрешни причини не може да продължава - това е време, за да се обадите на матрицата (= показва съобщение и да излезете с нула без код).

Съвет: съобщение за грешка, за да завърши недвусмислено ", да спре." тя дава възможност за потребителски ясно, че програмата е спряна заради открити грешки.

надясно, за да умре

Сценарият трябва да върне справедлива възвращаемост код: ако е успешно - 0, в случай на повреда - нещо друго. правилния код за достъп може да се използва успешно в Makefile-скрипт за SVN-разделям се, и т.н.

Забележка: в Впиши "и специален режим, когато няма нищо изобщо нищо не се отпечатва. само изходните сигнали код: намерен или не е намерен.

Между другото, Perl'ovy умре автоматично осигурява различна от нула изход код.

Помощ (H)

По-H (--help желателно и също) скрипта трябва да изведе на самия сертификат.

Уверете се, че е описано в препратката:

всички опции и параметри, с разделение на задължително / по избор и приета по подразбиране на;

типични и сложни примери за употреба: потребителят може да ги копирате и веднага получавате един пример за изпълнение на работната програма.

Понякога се опитвам да помогна на изхода в STDERR. Това е грешно. Референтен трябва да падне до стандартния изход. че е лесно да се справя Впиши ОМ, по-малко "ОМ и т.н.

Все още можете да се обърне внимание на $ пейджър променливата среда. и ако е зададено - прехвърляне на сертификат през тръбата тази програма. Така например, прави това Git помощ .

Друга причина е, че оттеглянето помогне за завършването на нула без код за изход (изход 2). Това е грешно. Ако потребителят иска сертификат, а след сключването му - успешно да се изпълни задачата, а сценарият трябва да докладва, че приключи успешно (изход 0).

разумни подразбиране

Добри стойности са от решаващо значение за доброто функциониране на програмата. Изберете трябва да се основава върху това, което е основната цел на програмата и как той ще се използва по-често по подразбиране.

Колкото по-често се нуждаят от възможност, толкова по-лесно да бъдат включени, и най-често стойността на параметъра трябва да се приема по подразбиране. Идеален: програмата изпълнява най-често се налага задачата без никакви параметри (например: кал debuild софтуерна ли да направите ако съществува plackup ......).

Отново добър пример дава Впиши. Търсене в стандартния вход е по подразбиране; Търсене в списъка на файловете се активират чрез проста изброяване на тях; рекурсивно търсене, размер контекст и при нечувствителност включения опции с една буква; екзотичен вид контрол буфериране - multiletter опции.

Интересното е подредена в GNU контрол Впиши цвят оцветяване изход: по подразбиране за изход към интерактивен терминал заключение е боядисан, с файл - не боядисани, както и за контрол на ръка оцветяване има multiletter --color опция.

Avtokomplit

Ако сценарият има много възможни параметри (особено multiletter), пише и издава своите потребители да попълват автоматично функция (функцията за автоматично довършване) в популярния Shell. Документация: да zsh. използвана от Баш.

Между другото, обърнете внимание на gnu_generic функция в zsh. --help Ако скрипта ви говори за възможностите си в доста конвенционален формат, за да се даде възможност на автоматичното довършване на параметрите ще бъде достатъчно, за да

compdef _gnu_generic my-script.pl

Малко по-трик: Оцветяване изход

Ако вашият скрипт, който да се използва от хора онлайн - опрости възприемането на изход, след като го боядисани в различни цветове. Вижте. Напр Срок :: ANSIColor.

Малко по-трик 2: Silent искане парола

Ако сценарият е необходимо да се поиска от потребителя за въвеждане на парола или друга поверителна информация, забранете на дисплея на входните знаци. Например, използването на термина :: ReadKey:

Това са, в моя опит, най-простите начини за подобряване на работата на потребителите на конзолата програми.

За когнитивната съпротива може да се прочете в книгата Алана Kupera "психиатрична болница в ръцете на пациентите", заяви ръководителят на "поведение, което не е свързано с физическите сили" ↩

Подход ", за да напишете фраза, и забрави" се нарича специална;) ↩