Для формата ключей нет жесткого стандарта, однако существуют договоренности, нарушать которые в наше время уже неприлично. Во-первых, если параметр начинается на -, это - однобуквенный ключ . За -, как правило, следует один символ, чаще всего - буква, обозначающая действие или свойство, которое этот ключ придает команде. Так проще отличать ключи от других параметров - и пользователю при наборе командной строки, и программисту, автору команды:
[ivan@localhost ivan]$ who -m
ivan tty1 Sep 20 13:56 (localhost)
[ivan@localhost ivan]$ cal -m
Сентября 2004
Пн Вт Ср Чт Пт Сб Вс
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30Пример 2.14. Использование ключа “-m” в разных командах
Для who ключ -m означает ”Me”, то есть ”Я”, и в результате who работает похоже на whoami. А для cal ключ -m - это команда выдать календарь, считая первым днем понедельник (”Monday”), как это принято в России.
Свойство ключа должно быть, с одной стороны, предельно коротким, а с другой стороны - информативным, называется аббревиативностью . Не только ключи, но и имена наиболее распространенных команд Linux обладают этим свойством.
В-третьих, иногда ключ изменяет поведение команды таким образом, что меняется и толкование параметра, следующего в командной строке за этим ключом. Выглядит это так, будто ключ сам получает параметр, поэтому ключи такого вида называются параметрическими . Как правило, их параметры - имена файлов различного применения, числовые характеристики и прочие значения, которые нужно передать команде:
[ivan@localhost ivan]$ info info "Expert info" Cross-refs Help-Cross -o text
info: Запись ноды (info.info.bz2)Help-Cross...
info: Завершено.
[ivan@localhost ivan]$ cat text -n
1 File: info.info, Node: Help-Cross, Up: Cross-refs
2
3 The node reached by the cross reference in Info
4 ------------------------------------------------
. . .Пример 2.15. Использование info -o
Здесь info запустилась не в качестве интерактивной программы, а как обработчик info-документа. Результат работы - текст узла info → Expert info → Cross-refs → Help-Cross, программа поместила в файл text. А программа cat вывела содержимое этого файла на терминал, пронумеровав все строки (по просьбе ключа -n, ”number”).
Теперь стало более или менее понятно, что означают неудобочитаемые строки в поле SYNOPSIS руководства. Например [ -smjy13 ] из руководства по cal (5) говорит о том, что команду можно запускать с необязательными ключами -s, -m, -j, -y, -1 и -3.
В-четвертых, есть некоторые менее жесткие, но популярные договоренности о значении ключей. Ключ -h (”Help”) обычно (но, увы, не всегда) заставляет команды выдать краткую справку (нечто похожее на SYNOPSIS, иногда с короткими пояснениями). Если указать - вместо имени выходного файла в соответствующем параметрическом ключе (нередко это ключ -o), вывод будет производиться на терминал. Наконец, бывает необходимо передать команде параметр, а не ключ, начинающийся с -. Для этого нужно использовать ключ --:
[ivan@localhost ivan]$ info -o -filename-with-
info: Запись ноды (dir)Top...
info: Завершено.
[ivan@localhost ivan]$ head -1 -filename-with-
head: invalid option -- f
Попробуйте `head --help' для получения более
подробного описания.
[ivan@localhost ivan]$ head -1 -- -filename-with-
File: dir Node: Top This is the top of the INFO treeПример 2.16. Параметр-не ключ, начинающийся на “-”
Здесь Иван сначала создал файл -filename-with-, а потом пытался посмотреть его первую строку (команда head - количество-строк имя-файла выводит первые количество-строк из указанного файла). Ключ -- (первый - - признак ключа, второй - сам ключ ) обычно запрещает команде интерпретировать все последующие параметры командной строки как ключи, независимо от того, начинаются они на - или нет. Только после -- head согласилась с тем, что -filename-with- - это имя файла.
| Ключи | Полнословные ключи |