Для формата ключей нет жесткого стандарта, однако существуют договоренности, нарушать которые в наше время уже неприлично. Во-первых, если параметр начинается на -
, это - однобуквенный ключ . За -
, как правило, следует один символ, чаще всего - буква, обозначающая действие или свойство, которое этот ключ придает команде. Так проще отличать ключи от других параметров - и пользователю при наборе командной строки, и программисту, автору команды:
[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
Для 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 ------------------------------------------------
. . .
Здесь 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
Здесь Иван сначала создал файл -filename-with-, а потом пытался посмотреть его первую строку (команда head
- количество-строк имя-файла выводит первые количество-строк из указанного файла). Ключ --
(первый -
- признак ключа, второй - сам ключ ) обычно запрещает команде интерпретировать все последующие параметры командной строки как ключи, независимо от того, начинаются они на -
или нет. Только после --
head согласилась с тем, что -filename-with- - это имя файла.
Ключи | Полнословные ключи |