[ivan@localhost ivan]$ apropos s
. . . (четыре с половиной тысячи строк!)
Одного неудачного запуска apropos Ивану было достаточно для того, чтобы понять: команд в Linux очень много. Ему пришло в голову, что никакая программа - пусть даже и оболочка - не может самостоятельно разбираться во всех задокументированных командах. Кроме того, Гончаров называл большинство команд утилитами, то есть полезными программами. Стало быть, командный интерпретатор не обязан уметь выполнять все, что вводит пользователь. Ему достаточно разобрать командную строку, выделить из нее команду и параметры, а затем запустить утилиту - программу, имя которой совпадает с именем команды.
В действительности собственных команд в командном интерпретаторе немного. В основном это операторы языка программирования и прочие средства управления самим интерпретатором. Все знакомые Ивану команды, даже echo
, существуют в Linux в виде отдельных утилит. shell занимается только тем, что подготавливает набор параметров в командной строке (например, раскрывая шаблоны), запускает программы и обрабатывает результаты их работы:
[ivan@localhost ivan]$ type info
info is /usr/bin/info
[ivan@localhost ivan]$ type echo
echo is a shell builtin
[ivan@localhost ivan]$ type -a echo
echo is a shell builtin
echo is /bin/echo
[ivan@localhost ivan]$ type -a -t echo
builtin
file
[ivan@localhost ivan]$ type -a -t date
file
[ivan@localhost ivan]$ type -at cat
file
В bash тип команды можно определить с помощью команды type
. Собственные команды bash называются builtin (встроенная команда) , а для утилит выводится путь, содержащий название каталога, в котором лежит файл с соответствующей программой, и имя этой программы. Некоторые - самые нужные - команды встроены в bash, даже несмотря на то, что они имеются в виде утилит (например, echo ). Работает встроенная команда так же, но так как времени на ее выполнение уходит существенно меньше, командный интерпретатор выберет именно ее, если будет такая возможность. Ключ -a
(”all”, конечно), заставляет type
вывести все возможные варианты интерпретации команды, а ключ -t
- вывести тип команды вместо пути.
По совету Гончарова Иван сгруппировал ключи, написав -at
вместо -a -t
. Многие утилиты позволяют уменьшать длину командной строки подобным образом. Если встречается параметрический ключ, он должен быть последним в группе, а его значение - следовать, как и полагается, после. Группировать можно только однобуквенные ключи.
Интерпретатор командной строки (shell) | Слова и разделители |