Принятые соглашения


Синтаксис

Большинство компонентов изделия следует стандартным соглашениям для синтаксиса аргументов и поведения. Эти соглашения базируются на соглашениях об утилитах, описанных в международном стандарте ИСО/МЭК 9945, известным под наименованием «POSIX».

Краткое описание синтаксиса для каждого компонента представлено в верхней части страницы соответствующего пункта «Описание». Первым представлено имя компонента, далее следует список допустимых аргументов командной строки, которые включают опции, параметры опций (например, "число" в опции "-n число") и операнды (например, имена файлов, над которыми выполняются действия).

Краткое описание синтаксиса является источником информации о взаимоисключении опций и о том, является ли данный элемент командной строки обязательным. Эта информация обычно не содержится в подробном описании опций, представленном после описания синтаксиса.

Типичная строка синтаксиса компонента выглядит следующим образом:

имя_компонента [-abcd] [-o параметр | -p параметр] входной_файл... выходной_файл


В этом примере показан компонент с именем имя_компонента, в котором допускаются опции -a, -b, -c и -d - эти опции могут использоваться по одной или вместе в любой комбинации.

Компонент также допускает опции -o и -p, которые обе имеют обязательные параметры и которые не могут использоваться вместе (но могут использоваться совместно с другими опциями -abcd). Компоненту должны быть указаны два или более операнда: один или более входных_файлов и не более одного выходного_файла.

Интерпретация описаний

Основные принципы:

имя_компонента [-abcd]

имя_компонента [имя_файла...]

Если элемент данных обязателен, то многоточие указывает, что он может встречаться один или более раз, например:

имя_компонента имя_файла...


Вызов компонентов

Имеется ряд общих принципов, которым нужно следовать при запуске компонентов.

В командной строке одна опция может следовать непосредственно за другой после одиночного дефиса (-), если у каждой из предшествующих опций отсутствуют параметры. Например, строка опций -abc эквивалентна строке опций -a -b -c. Однако, если у опции -a предусмотрен параметр, то -abc будет эквивалентно -a bc.

Опции и их параметры должны разделяться пробелами в соответствии с описанием. Если в документации указано:

-n число

то в командной строке параметр число должен быть отделен от -n пробелом. Но если в документации указано:

-nчисло

то параметр число должен задаваться за той же самой опцией -n без любых разделительных пробелов.

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

Опции обычно перечисляются в алфавитном порядке, но нет никаких ограничений на порядок их следования в командной строке, если это не оговорено иначе в документации на данную утилиту. Следует обратить внимание, что в некоторых утилитах взаимоисключающие опции могут отменять друг друга в пользу той, которая была указана последней.

Все опции и связанные с ними параметры должны предшествовать любым операндам в командной строке. Например, если необходимо выполнить утилиту cp с опцией -R, нужно задать команду:

cp -R dir1 dir2

но не команду:

cp dir1 dir2 –R

Если в операндах и параметрах опций требуются числовые значения, то подразумеваются десятичные целые числа, если не определено иначе. В некоторых компонентах также допускаются формы 0восьмеричное_число и 0xшестнадцатиричное_число, без каких-либо дополнительных оговорок. По этой причине не следует задавать в десятичном числе ведущий нуль.

Целые числовые операнды и параметры опций должны быть в диапазоне от 0 до 2147483647, если не определено иначе. Если допускаются отрицательные числа, то допустимый диапазон - от -2147483647 до 2147483647.

Аргумент -- (двойной дефис) может помещаться в командной строке как разделитель, указывающий конец раздела опций и начало раздела операндов. Это особенно полезно, когда операнды сами могут начинаться с черточки. Например, чтобы удалить файл с именем "-t", можно было бы использовать:

rm -- -t

Утилиты, не имеющие опций, будут также допускать (и игнорировать) -- перед операндами, если не указано иначе.

Большинство утилит, операндами и/или параметрами опций которых являются имена файлов, допускают указание дефиса ("-") вместо имени файла, что будет означать стандартный поток ввода, или, если это однозначно определяется из контекста, стандартный вывод.

Соглашения об именах файлов

Имена путей файлов, задаваемые в командной строке, ограничены 255 символами в длину. Некоторые из входных файлов идентифицируются как текстовые. Подразумеваются, что в текстовых файлах содержится текст ASCII со строками длиной не более 2048 символов, завершаемыми символами новой строки, если не указано иначе.

Соглашения по сигналам

Реакции на сигналы наследуются из родительского процесса, вызвавшего компонент. Большинство компонентов не выполняют какой-либо специальной обработки сигналов и ведут себя в соответствии с системными значениями по умолчанию. Если компонент при получении сигнала должен выполнять действие, отличное от принятого по умолчанию, это указывается в документации.

Обратите внимание, что после того, как компонент завершится по сигналу, временные файлы не будут оставлены, если не определено иначе.

Компоненты, имена которых начинаются с прописной буквы, используются для обозначения серверных и резидентных процессов. Все другие имена утилит полностью состоят из символов в нижнем регистре. Серверные и резидентные процессы обычно запускаются только в режиме root и игнорируют большинство сигналов (например, SIGPWR).

Соглашения о кодах завершения

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

Для некоторых компонентов код завершения которых может отражать только успех или сбой последнего предпринятого действия (из многих). В таких случаях, это будет явно указано в секции "Коды завершения".

Соглашения об обработке ошибок

Компоненты могут отказывать по многим причинам – от некорректного использования компонента до отказов системы. В документации по компонентам не предпринимается попыток обрисовать точное поведение для всех возможных типов отказа.

В всех случаях, если это не определено иначе, каждая ошибка будет приводить к печати диагностического сообщения в стандартный поток ошибок.

Когда возникает ошибка, компонент остановит обработку текущего операнда и приступит к обработке следующего по порядку. Если компонент не может обработать один операнд, но обработает все другие, то код завершения все же будет сигнализировать отказ. Для компонентов, которые выполняют рекурсивный обход файловой системы (например, find), если действие не может быть выполнено c одним файлом в пределах уровня иерархии, то компонент остановит обработку этого файла, но продолжит обработку следующих файлов на этом уровне иерархии.

Когда происходит неисправимая ошибка (например, недостаточно памяти), компонент напечатает диагностическое сообщение в стандартный поток ошибок и немедленно завершится.